我用spring boot
制作了一个带有websockets支持的应用程序。一切都是
工作得很好。我正在使用 SockJS
+ Stomp
。不用担心。它只是在工作。但
现在我想支持 SockJS
使用其后备协议(protocol)的能力。和
看来它不能开箱即用。
以下是我添加端点的方法:
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
就是这样。无需更多配置。
现在,当我在浏览器中禁用 webcokets 并尝试启动我的应用程序时,我得到了
404
用于 SockJS
尝试用作后备的传输。
看到了吗?首先 GET/ws/iframe.html
404,然后 POST/ws/**/xhr_send?t=...
也是 404。
这是什么意思?我是否必须开发其他东西以便 SockJS
后备协议(protocol)会起作用吗?
最佳答案
如果未找到 session ID,xhr_send 端点将返回 404。
如果您的 Websocket 服务扩展到多个实例,根本原因可能是 session 是由一个实例发起的,而其他实例不知道这一点。
可能的修复:
- 粘性 session - 将来自客户端的所有请求路由到同一实例
- 分布式状态 - 在实例之间共享用户 session
关于java - Spring websockets SockJS 后备协议(protocol)不能开箱即用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941610/