java - Spring websockets SockJS 后备协议(protocol)不能开箱即用?

标签 java spring websocket spring-websocket sockjs

我用spring boot制作了一个带有websockets支持的应用程序。一切都是 工作得很好。我正在使用 SockJS + Stomp。不用担心。它只是在工作。但 现在我想支持 SockJS 使用其后备协议(protocol)的能力。和 看来它不能开箱即用。

以下是我添加端点的方法:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/ws").withSockJS();
}

就是这样。无需更多配置。

现在,当我在浏览器中禁用 webcokets 并尝试启动我的应用程序时,我得到了 404 用于 SockJS 尝试用作后备的传输。

404 on SockJS fallback protocols

看到了吗?首先 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/

相关文章:

java - 将 spring-data-jpa 引入项目会导致 Spring 停止处理 @RequestMapping 注解

SSL 响应被分成两个回调

java - 在没有 GUI 的情况下从 Java 程序内部运行 GATE 管道。用 gate 构建一个 tomcat 应用程序

java - Android Studio错误: Could not find Android Buld Tools

java - Hibernate 或 JPA 中的 `SELECT COUNT(*) FROM (SELECT DISTINCT ...)`

spring - 如何在 Spring Data REST 中使用 spring.data.rest.enable-enum-translation

java - 带有 ASyncTask 的计时器中的 IllegalStateException

java - Spring Data Mongo @Indexed 多次创建索引

javascript - 使用 Python 或 JavaScript 获取到 WhatsApp 的 websocket 连接?

python - 如何从异步函数发送 websocket.send() 数据