由于网络丢失导致的WebSocket客户端断开连接并未被Spring服务器拦截

时间:2017-01-27 13:34:21

标签: spring-boot spring-websocket

我有一个应用程序,客户端使用websockets连接到运行Spring Boot Tomcat的服务器。 我的问题是服务器是否有办法检测由于网络丢失导致的客户端断开连接。

感谢。

2 个答案:

答案 0 :(得分:0)

如果您正在使用stomp,请检查SessionDisconnectEvent。 对于原始Websocket连接,您可以使用: WebSocketHandler - > afterConnectionClosed

答案 1 :(得分:0)

我之前搜索过这个,我能找到的解决方案是在服务器和客户端之间实现乒乓机制。

例如,每隔几秒就会向特定主题的客户端发送一条虚拟消息并收到另一个虚拟回复,如果您在配置的时间段内没有得到回复,则可以认为客户端已断开连接。

如上所述here

  

STOMP和Spring也允许我们设置主题,每一个   订阅者将收到相同的消息。这将是非常的   用于跟踪活跃用户。在UI中,每个用户订阅一个   报告用户处于活动状态的主题,以及我们的示例   该主题将每2秒生成一条消息。客户会   回复包含自己的用户列表的每条消息   heartbeat,然后更新发送给其他客户端的消息。   如果客户未登记超过5秒(即错过了两次)   心跳),我们认为他们离线。这让我们接近实时   可以聊天的用户的分辨率。用户将出现在   在屏幕左侧的框中,单击一个名称将拉动   为他们建立一个聊天窗口,旁边有一个信封的名字   有新消息。