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

我写了个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 中还有数据的,就说明是已经没有心跳了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
心跳检测WebSocket中是一种机制,用于检测连接是否仍然有效。在Java中,你可以使用WebSocket协议来实现心跳检测。 您可以使用以下代码来实现WebSocket心跳检测。 ``` // 服务端 import javax.websocket.*; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/websocket") public class WebSocketServer { @OnOpen public void onOpen(Session session) { // 连接建立时的操作 } @OnMessage public void onMessage(String message, Session session) { // 收到消息时的操作 } @OnClose public void onClose(Session session) { // 连接关闭时的操作 } @OnError public void onError(Throwable error) { // 出现错误时的操作 } @Scheduled(fixedRate = 5000) // 每5秒发送一次心跳消息 public void sendHeartbeat() { // 发送心跳消息 } } // 客户端 import javax.websocket.*; @ClientEndpoint public class WebSocketClient { @OnOpen public void onOpen(Session session) { // 连接建立时的操作 } @OnMessage public void onMessage(String message, Session session) { // 收到消息时的操作 } @OnClose public void onClose(Session session) { // 连接关闭时的操作 } @OnError public void onError(Throwable error) { // 出现错误时的操作 } @Scheduled(fixedRate = 5000) // 每5秒发送一次心跳消息 public void sendHeartbeat() { // 发送心跳消息 } } ``` 以上代码示例了一个简单的WebSocket服务器和客户端,它们可以通过发送心跳消息来保持连接的活动状态。您可以根据自己的需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值