这是我在 JavaScript 客户端和 Java 服务器之间创建 WebSocket channel 的简单尝试。
// java websocket server configuration with spring boot
// server port: 8080 set in the "application.yml"
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app")
.enableSimpleBroker("/notification");
}
}
// js websocket client configuration with "webstomp-client"
import webstomp from 'webstomp-client';
const connection = new WebSocket('ws://localhost:8080/websocket');
const stompClient = webstomp.over(connection);
stompClient.connect(()=>{
stompClient.subscribe('/app/notification', () => console.log('Connection established with server'));
});
控制台显示如下:
WebSocket connection to 'ws://localhost:8080/websocket' failed: Error during WebSocket handshake: Unexpected response code: 200
我看了很多其他帖子,其中大部分都与允许来源有关。我尝试将原点设置为 localhost
以及本地 IP 地址,但没有成功。
我错过了什么?任何帮助都是巨大的。
编辑:客户端是使用 create-react-app
创建的,如果相关的话。
编辑: 客户端开启:http:localhost:3000
,服务器开启:http:localhost:8080
。
最佳答案
您在服务器端使用 SockJS 配置您的端点,但您没有在客户端使用 SockJS。这就是为什么您得到 200 状态代码而不是 101 的原因。要么在客户端使用 SockJS(而不是原始 WebSocket),要么在服务器端删除 withSockJS()
。
关于javascript - 带有 Spring Boot 和 JavaScript 的 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844836/