我尝试使用Stomp(而不是SockJS)与Spring服务器和Angular客户端实现纯websocket。
这是我在Spring中启用websocket的代码:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractSecurityWebSocketMessageBrokerConfigurer {
@Bean
public TaskScheduler heartBeatScheduler() {
return new ThreadPoolTaskScheduler();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker('/status')
.setHeartbeatValue(new long[] { 10000, 10000})
.setTaskScheduler(heartBeatScheduler());
registry.setApplicationDestinationPrefixes('/');
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint('/myapp-websocket').setAllowedOrigins("*");
}
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages.anyMessage().authenticated();
}
@Override
protected boolean sameOriginDisabled() {
return true;
}
}
但是当我尝试使用stompjs在angular中连接时,无法连接。当我使用wscat wscat -c "ws://localhost:4200/api/myapp-websocket"
进行测试时(/api/是正确的),没有响应,一直在尝试连接但没有成功。
这里出了什么问题?
编辑:这是我使用的两个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-messaging</artifactId>
</dependency>
编辑:
我也试图将 messages.anyMessage().authenticated();
更改为 messages.anyMessage().permitAll();
,但依然无法连接到我的WebSocket。
Tue Feb 18 2020 14:58:29 GMT+0100 (heure normale d’Europe centrale) "Opening Web Socket..."
,然后连接从未打开。 - Spialdor