首页 > 解决方案 > 在应用程序初始化时和运行时注册动态 websocket 暴露了不同的端点

问题描述

我正在尝试动态注册 websocket。例如,我在运行时注册了“/sampleEndpoint”,因此 ServerWebSocketContainer 将注册它并开始在该端点上发布数据。但是现在,如果我在 PostConstruct 中的应用程序初始化期间执行相同的过程,那么我将无法连接到“/sampleEndpoint”,但必须在末尾附加“/websocket”,因此当从客户端连接时,url 变为“/sampleEndpoint/websocket” . 为什么我们在不同的情况下得到不同的端点?

我已将 github url 附加到代码中。

https://github.com/pinkeshsagar-harptec/code-sample.git

标签: springspring-integrationspring-websocketspring-integration-dsl

解决方案


好吧,这就是 SockJS 选项的工作原理:https ://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket-fallback 。

如果您的客户端不是 SockJS,那么您必须添加该/websocket子路径。

不知道为什么它不适用于动态注册的端点......

@PostConstruct它不是动态的情况下:我们仍然在应用程序上下文的配置阶段做这些事情,所以它能够将我们的端点添加到一个静态的HandlerMapping. @PostConstruct当所有人都完成了他们的逻辑时,稍后会应用动态性质。您不需要手动启动该流程注册,因为自动启动阶段尚未通过@PostConstruct处理。

回覆。IntegrationDynamicWebSocketHandlerMapping: 这听起来更像是一个错误,我需要进行更多调查。我猜您仍然在那里使用 SockJS 选项,并且它也必须应用于动态端点。

感谢您的耐心等待!我会尽快调查并修复它。

更新

修复在这里:https ://github.com/spring-projects/spring-integration/pull/3581 。


推荐阅读