spring - 在应用程序初始化时和运行时注册动态 websocket 暴露了不同的端点
问题描述
我正在尝试动态注册 websocket。例如,我在运行时注册了“/sampleEndpoint”,因此 ServerWebSocketContainer 将注册它并开始在该端点上发布数据。但是现在,如果我在 PostConstruct 中的应用程序初始化期间执行相同的过程,那么我将无法连接到“/sampleEndpoint”,但必须在末尾附加“/websocket”,因此当从客户端连接时,url 变为“/sampleEndpoint/websocket” . 为什么我们在不同的情况下得到不同的端点?
我已将 github url 附加到代码中。
解决方案
好吧,这就是 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 。
推荐阅读
- javascript - 在标签名称中创建新 HTML 属性的问题
- php - 从网络摄像头拍摄的上传图像在上传到服务器时已损坏
- visual-studio - CMake 如何检测 MSVC 版本
- caching - 如何找到虚拟页偏移量的值、虚拟页码的值等?
- excel - 在单元格中使用双击鼠标将值或文本复制到新行中的另一个工作表
- php - 如何使用 symfony 表单类型创建多个文件上传字段?
- dart - 如何在颤振飞镖中使用具有多个条件的三元运算符?
- magento - Aem Magento 集成,aem 订单未在 magento 中显示
- android - 找不到符号类 RTCClientVideoTracksCallback
- c# - 如何将保存在列表中的datagridview复选框列值导出到excel中