【发布时间】:2017-06-13 05:00:04
【问题描述】:
我有一个应用程序,其中客户端使用 websockets 连接到运行 Spring Boot Tomcat 的服务器。 我的问题是服务器是否有办法检测由于网络丢失而导致的客户端断开连接。
谢谢。
【问题讨论】:
标签: spring-boot spring-websocket
我有一个应用程序,其中客户端使用 websockets 连接到运行 Spring Boot Tomcat 的服务器。 我的问题是服务器是否有办法检测由于网络丢失而导致的客户端断开连接。
谢谢。
【问题讨论】:
标签: spring-boot spring-websocket
我以前搜索过这个,我能找到的解决方案是在服务器和客户端之间实现一个乒乓机制。
例如,每隔几秒钟就特定主题向客户端发送一条虚拟消息并收到另一个虚拟回复,如果您在配置的时间内没有收到回复,则可以认为客户端已断开连接。
如here所述,
STOMP 和 Spring 还允许我们设置主题,其中每个 订阅者将收到相同的消息。这将是非常 用于跟踪活跃用户。在 UI 中,每个用户订阅一个 报告哪些用户处于活动状态的主题,在我们的示例中 该主题将每 2 秒产生一条消息。客户将 回复每条包含用户列表的消息 心跳,然后更新发送给其他客户端的消息。 如果客户超过 5 秒没有签到(即错过了两次 心跳),我们认为它们是离线的。这给了我们近乎实时的 可用于聊天的用户的分辨率。用户将出现在 屏幕左侧的框,单击名称将拉 为他们打开一个聊天窗口,并在他们旁边放一个信封的名字 有新消息。
【讨论】:
如果您使用 stomp,请检查 SessionDisconnectEvent。 对于原始 Websocket 连接,您可以使用: WebSocketHandler-->afterConnectionClosed
【讨论】: