保持websocket长时间连接永不断开

这篇具有很好参考价值的文章主要介绍了保持websocket长时间连接永不断开。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、定期发送心跳包(ping/pong)
客户端和服务器端都需要定期发送ping消息,并相应得到pong消息,以确保连接仍然正常。如果超过一定时间没收到pong,需要主动关闭连接。
JS客户端代码:

//定期发送ping
setInterval(() => {
	websocket.send('ping');
}, 30000);

Python客户端代码:

#定时发送ping
def heartbeat() :
    while True:
        ws.send("ping")
        time.sleep(30) #30s一次
#开启定时任务
threading.Thread(target=heartbeat).start()

java服务器端代码

@ServerEndpoint("/websocket")
public class WebSocketServer {
  private Session session;
  
  @OnMessage
  public void onMessage(String message, Session session) {
    this.session = session;
    if (message.equals("ping")) {
      try {
        session.getBasicRemote().sendPong(null);  // 回复pong
      } catch (IOException e) {
        e.printStackTrace();
      }
    } else {
      // 处理其他消息
    }
  } 
}

2、捕获关闭连接事件并重连websocket
JS客户端代码:

//连接关闭的回调方法
websocket.onclose = function() {
	setMessageInnerHTML("WebSocket连接关闭");
	setTimeout(() => {
    	webSocket = new WebSocket('ws://url');  // 重新连接
  	}, 5000);  // 5秒后重连
}

Python客户端代码:

def on_close(ws):
    timer = threading.Timer(5, connect)
    timer.start()
ws.on_close = on_close
def connect():
    ws.connect("ws://url")

3、实现断线重连
JS客户端:

setInterval(() => {
  if (!navigator.onLine) {  // 网络断开
    setTimeout(() => {    
      webSocket = new WebSocket('ws://url');  // 网络恢复,重连   
    }, 5000);
  }  
}, 1000);  

Python客户端:文章来源地址https://www.toymoban.com/news/detail-601776.html

def get_network_info(): 
    return networkx.is_connected()
def reconnect():
    timer = threading.Timer(5, connect)
    timer.start()
def check_network():
    while True:
        if not get_network_info():
            reconnect()
        time.sleep(10)
threading.Thread(target=check_network).start()

到了这里,关于保持websocket长时间连接永不断开的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • websocket 发送的消息超过默认限制就会自动断开连接

    近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等 获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上 springboot集成websocket需要三步: 添加依赖  添加配

    2024年02月12日
    浏览(45)
  • SpringCloudAlibaba 应用webSocket,解决连接成功后会立刻断开等问题

    最近公司有个大屏,需要做一个实时报警的功能,这就用到了webSocket技术,这个帖子就用来记录学习过程中的遇到的问题,如下是想要达到的效果图  1.第一步肯定是先导入依赖 这里记录第一个坑点,就是可能有的小伙伴会在启动的时候报错,这个是因为websocket和tomcat有冲突

    2024年02月11日
    浏览(57)
  • 小米手机锁屏时间设置为永不休眠_手机不息屏_保持亮屏

    环境:打开手机自带的锁屏时间设置发现没有  永不息屏的选项 原因:采用了三星OLED屏幕,所以根据OLED屏幕特性,这个是为了防止烧屏而特意设计的。非OLED机型支持设置“永不” 解决方案1:原生系统是支持永不锁屏的,所以厂商为为了优化系统对该设置进行了屏蔽,利用

    2024年02月03日
    浏览(108)
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    浏览器通过JavaScript向服务器发出建立WebSocket链接的请求,链接建立后,客户端和服务器端就可以通过TCP链接直接交互数据。WebSocket链接后可以通过 send() 方法来向服务器发送数据,并通过 onnessage 事件来接受服务器返回的数据。 WebSocket - Web API 接口参考 | MDN

    2024年01月18日
    浏览(43)
  • Linux服务器SSH客户端断开后保持程序继续运行的方法

    在申请服务器连接到桌面后,有些时候需要跑一些运行时间很长的程序(深度学习的训练程序)。在这期间如果退出断开连接,即:关闭桌面的编辑器或网页端的jupyter界面后Linux系统会自动关闭所有进程,程序也会随之终止运行(被挂起),这是不希望看到的,因此本文将通

    2024年02月05日
    浏览(75)
  • python实现TCP数据通讯,socket 客户端断开依然保持监听,多线程。

    服务端: 客户端: 服务端采用 try...except .. 形式,代码如下:

    2024年02月14日
    浏览(43)
  • WebSocket断开原因和心跳机制

    WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来。 错误状态码: WebSocket断开时,会触发CloseEvent, CloseEvent会在连接关闭时发送给使用 WebSockets 的客户端. 它在 WebSocket 对象的 onclose 事件监听器中使用。CloseEvent的code字段表示了WebSocket断开的原因。可以从该字段

    2024年02月04日
    浏览(52)
  • Vue中WebSocket链接中断、心跳机制防止自动断开

    1、WebSocket链接中断原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来。 二、心跳机制防止自动断开 WebSocket在一段时间内没有进行通讯便会自读断开链接,可以每隔30秒或一分钟向服务器发送一次通讯防止链接终端

    2024年02月16日
    浏览(46)
  • websocket链接断开服务器报错java.io.EOFException解决办法

    首先说一下报错原因,由于默认60s无消息交互就会关闭长连接,所以导致这个报错 解决方案其实也很简单,既然是长时间没有通信导致断开,其实保持通信就好,可以设置心跳时间来解决。 可以前端也可以后端,附上前端代码吧 //心跳检测 var heartCheck = {     timeout: 60000,//

    2024年02月08日
    浏览(56)
  • 服务器SSH连接问题:每次连接都需要多次尝试或需长时间等待

    服务器系统:Ubuntu 22.04 相关服务: open-ssh 最近服务器进行ssh连接往往需要多次尝试连接才能够成功,失败的连接报错如下: 或者输入密码后需要等待很久才能重新连接 /etc/ssh/sshd_config 为ssh服务的参数,其中有一条为: 其含义如下: 10:未验证连接数达到10开始进行连接dr

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包