我正在编写的应用程序正在使用Spring Websocket支持,并使SockJS能够支持非支持websocket的客户端。
根据Java Websocket规范,当HTTP会话失效时,源自该会话的WebSocket连接将自动关闭。但是,Spring文档中没有任何内容描述当SockJs选择不使用websockets进行连接时会发生什么。
到目前为止,我看到由于CSRF令牌变得无效而导致非websocket连接被关闭,但是我认为这仅适用于短期连接,而不适用于持久连接。当会话失效时,我需要尽快关闭所有“推送”连接。
另外,我需要在连接关闭之前立即通过他们的订阅向客户端发出“告别”消息。我怎么能这样做?
编辑:添加更多信息,因为我担心自己过于简洁。
我正在使用功能齐全的代理来中继对后端ActiveMQ实例的订阅。我需要通过用户的订阅发送告别消息,而不是任何其他用户的订阅,即使订阅是相同的。
现在Roght,如果使用用户目的地,我想知道为事件ApplicationListener
创建HttpSessionDestroyedEvent
,检索用户名并使用SimpMessagingTemplate
发送消息。
有没有办法在不使用用户订阅的情况下执行此操作(可能是一些拦截器?)?
编辑2:看起来非websocket连接第一眼也被关闭,但我不确定“流”和“轮询”是否都像连接一样(见https://github.com/sockjs/sockjs-client/tree/0.3.x#supported-transports-by-browser-html-served-from-http-or-https)。任何人都可以指向Spring Websocket中的代码,据说应该在用户会话失效时切断连接/订阅吗?