【发布时间】:2017-09-17 06:04:36
【问题描述】:
我有支持 Spring Websocket 的 Spring 服务器。我想使用 STOMP 子协议来处理 web 套接字上的通信,所以 STOMP 端点的配置如下:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat")
.setAllowedOrigins("*")
.withSockJS();
}
}
Spring 文档和基本上我能找到的有关该主题的任何资源都显示了如何使用 SockJS + StompJS 创建 STOMP 客户端。它可以工作,但据我所知,它根本不需要 - 因为 STOMP 只是一个子协议,我应该能够通过使用 STOMP 消息语法基本上从任何 Web 套接字客户端与我的服务器通信。
假设我只想从 Google Chrome Simple Web Socket Client 插件连接到我的 STOMP 服务器。根据 STOMP 规范,我做的第一件事就是打开 Web 套接字连接。我用
ws://my.server.here/chat/websocket
链接。这部分有效,我的连接已建立。现在我想使用 STOMP。再次正如 STOMP 规范所说,我现在应该发送如下所示的 CONNECT 命令(STOMP 1.1):
CONNECT
accept-version:1.0,1.1
host:my.host.here
^@
然后我希望服务器使用 CONNECTED 命令响应,但我什么也没得到。如果不是“CONNECT”,我将使用一些不存在的命令,如“WRONG_COMMAND”,那么我可以看到关于未知命令的 Spring 异常被抛出,所以我想我的消息命中了 Spring 的 Websocket 内部,但我无法得到任何东西。如果这可行,我想使用后续的 SEND、SUBSCRIBE 等命令来执行操作。
这种工作流程是否可行?是我做错了什么,还是我错误地理解了整个想法及其运作方式?
【问题讨论】:
-
这个问题你解决了吗?
-
我没有使用 Google Websocket Client 解决它,但我在不使用 SockJS 的情况下通过移动应用程序使其工作。我发布了带有更详细描述的完整答案。如果您有任何其他问题,请随时询问。
标签: java stomp spring-websocket