当前位置: 首页 > 工具软件 > autobahn-java > 使用案例 >

websocket java 测试_【Java】一个关于WebSocket心跳检测实现的问题

郗浩言
2023-12-01

我写了个websocket应用,服务器端是tomcat下的java servelet,用的库是javax.websocket.*,客户端是android app。android端的websocket是用autobahn库做的,我想在服务器端或客户端程序中加入websocket的ping、pong操作,不知怎么加,网上没有合适的例子代码,有几个都是直接定时发消息的,用onmessage事件。不是标准的ping/pong操作。

哪位大大是否有相关的例子能提供参考下,由服务器端发送ping操作,客户端响应(据说,标准协议里面pong操作是自动响应的,不需要写程序reply,autobahn网上说是支持pong操作自动响应,不用管);或者客户端发送ping操作,服务器servelet端pong响应,我不知道javax.websocket库是否支持pong操作自动响应,如果能够提供例子就最好不过了。网上似乎做websocket很少讨论ping/pong操作的,真不知他们如何保持始终在线的长连接的。如果能提供例子程序,或者说说你们如何保持websocket长连接始终在线的最好,给个思路也行

回答

我自己实现心跳的方案是

先定义一个map (叫 PingPongMap )

后端开启一个定时线程,轮训客户端,发送ping ,记录到map 中,表示已经发送ping

前端会返回pong 回来,然后这时候可以map.remove() 删除

前端还有一个机制,定时发ping 消息,然后后端也是map.remove()

这里还可以记录次数,发了几次ping pong 无响应后可以清除

最后发现map 中还有数据的,就说明是已经没有心跳了

 类似资料: