连接到 websocket 时出现状态 200,但这是一个错误?
I get a status 200 when connecting to the websocket, but it is an error?
我的错误显示在我的浏览器控制台中:
"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"
我正在使用 Spring Websockets 4.1.5
和 Tomcat 8.0.18
。我的 WebSocketConfigurer 实现 class 看起来像:
@Configuration
@Controller
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer
{
class MyHandler implements WebSocketHandler
{
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception
{
System.out.println("afterConntectionEstablished called");
}
...implements rest of functions with a System.out.println and false for supportsPartialMessages()
}
}
@Override registerWebSocketHandlers(WebSocketHandlerRegistry registry)
{
registry.addHandler(myHandler(), "myHandler").withSockJS();
}
@Bean
public WebSocketHandler myHandler()
{
return new MyHandler();
}
}
我的 testWebsocketClient.js 尝试连接此代码,但错误代码为 200:
websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
我不知道接下来要尝试什么。我认为这会导致 afterConnectionEstablished(WebSocketSession session) 方法触发?代码200不好吗?
看看specification 。服务器应响应 101
以表示协议从 http
更改为 ws
。
请检查http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!
在你附加 /websocket
(到你的 URL)之后,它会给你错误
Failed to parse Origin header value [null]
;)
,然后会依次将您带到 that link.
您必须将 .setAllowedOrigins("*")
添加到您的 addHandler()
方法,然后它终于可以工作了!
请检查'ws://localhost:32768/DspClusterWebServices/myHandler'是否正确。
对于像我这样使用 angular + springboot 并出现此错误的人。请检查您是否启用了重定向或将所有非 api 端点请求转发回 index.html。喜欢:
@RequestMapping(value = "/**/{[path:[^\.]*}")
public String redirect() {
// Forward to home page so that route is preserved.
return "forward:/index.html";
}
如果你这样做,禁用它,你将得到 101
不知道这是否为时已晚,但我偶然发现的一个解决方案是在您在 spring 启动服务器中声明的 websocket 端点之后简单地附加字符串 /websocket
。这将有助于保持转发逻辑和连接并建立 websocket 连接。
作为我的另一个回答:[
我用的是springboot 2 +STOMP。
去掉.withSockJS()
,就OK了
我不知道原因,但对我有用。
我的错误显示在我的浏览器控制台中:
"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"
我正在使用 Spring Websockets 4.1.5
和 Tomcat 8.0.18
。我的 WebSocketConfigurer 实现 class 看起来像:
@Configuration
@Controller
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer
{
class MyHandler implements WebSocketHandler
{
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception
{
System.out.println("afterConntectionEstablished called");
}
...implements rest of functions with a System.out.println and false for supportsPartialMessages()
}
}
@Override registerWebSocketHandlers(WebSocketHandlerRegistry registry)
{
registry.addHandler(myHandler(), "myHandler").withSockJS();
}
@Bean
public WebSocketHandler myHandler()
{
return new MyHandler();
}
}
我的 testWebsocketClient.js 尝试连接此代码,但错误代码为 200:
websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
我不知道接下来要尝试什么。我认为这会导致 afterConnectionEstablished(WebSocketSession session) 方法触发?代码200不好吗?
看看specification 。服务器应响应 101
以表示协议从 http
更改为 ws
。
请检查http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!
在你附加 /websocket
(到你的 URL)之后,它会给你错误
Failed to parse Origin header value [null]
;) ,然后会依次将您带到 that link.
您必须将 .setAllowedOrigins("*")
添加到您的 addHandler()
方法,然后它终于可以工作了!
请检查'ws://localhost:32768/DspClusterWebServices/myHandler'是否正确。
对于像我这样使用 angular + springboot 并出现此错误的人。请检查您是否启用了重定向或将所有非 api 端点请求转发回 index.html。喜欢:
@RequestMapping(value = "/**/{[path:[^\.]*}")
public String redirect() {
// Forward to home page so that route is preserved.
return "forward:/index.html";
}
如果你这样做,禁用它,你将得到 101
不知道这是否为时已晚,但我偶然发现的一个解决方案是在您在 spring 启动服务器中声明的 websocket 端点之后简单地附加字符串 /websocket
。这将有助于保持转发逻辑和连接并建立 websocket 连接。
作为我的另一个回答:[
我用的是springboot 2 +STOMP。
去掉.withSockJS()
,就OK了
我不知道原因,但对我有用。