我的错误显示在浏览器的控制台中:
{
name: "my_serie",
columns: ["time", "value1", "value2"],
points: [
[1429807111, 1, 2],
[1429807111, 11, 22],
[1429807111, 111, 222]
]
}
我正在使用"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"
和Spring Websockets 4.1.5
。我的WebSocketConfigurer实现类如下所示:
Tomcat 8.0.18
我的testWebsocketClient.js尝试连接此代码,但错误代码为200:
@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();
}
}
我无法弄清楚下一步该尝试什么。我以为这会导致afterConnectionEstablished(WebSocketSession会话)方法被触发?代码200不好吗?
答案 0 :(得分:31)
请检查http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!
将/websocket
追加到您的网址后,它会给您错误
无法解析Origin标头值[null]
) 然后,它将引导您that link。
您必须在.setAllowedOrigins("*")
方法中添加addHandler()
,然后才能最终运作!
答案 1 :(得分:7)
查看specification 。服务器应以101
回复,以表示从http
到ws
的协议更改。
答案 2 :(得分:6)
我的另一个答案是:[https://stackoverflow.com/a/53272666/2930417][1]
我使用springboot 2 + STOMP。
删除.withSockJS()
,然后一切正常。
我不知道原因,但是对我有用。
答案 3 :(得分:2)
请检查'ws:// localhost:32768 / DspClusterWebServices / myHandler'是否正确。
答案 4 :(得分:2)
对于像我这样使用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
答案 5 :(得分:2)
不知道这是否为时已晚,但是我偶然发现的解决方案只是在Spring Boot服务器中声明的websocket端点之后附加字符串/websocket
。这将有助于同时保留转发逻辑和连接并建立Websocket连接。