webSocket使用心跳包实现断线重连

Posted qisimx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webSocket使用心跳包实现断线重连相关的知识,希望对你有一定的参考价值。

首先new一个webscoket的连接

 this.noticeSocketLink = new WebSocket(‘webSocket的地址’)

 

这里是连接成功之后的操作

linkNoticeWebsocket(){

        this.noticeSocketLink.onopen = ()=>{

  在连接成功打开的时候调用断线重连的函数

          this.webCloseLink(this.noticeSocketLink)

        }

        this.noticeSocketLink.onmessage = res => {}

        this.noticeSocketLink.onclose = res => {

          console.log("websocket is closed")

        }

      },

//断开连接,断线重连的函数
webCloseLink(WebSocketId){
  WebSocketId.send("心跳包内容")
  // 每个15秒发送一次心跳包
  let hb = setInterval(()=>{
    WebSocketId.send("心跳包内容")
    // 检测到websocket连接断开
    if(WebSocketId.readyState == 2 || WebSocketId.readyState == 3){
      clearInterval(this.hb)
      let i = 1
      let myVar = setInterval(()=>{
        if(WebSocketId.readyState == 2 || WebSocketId.readyState == 3){
          // 重新new一个websocket的连接
          this.noticeSocketLink = new WebSocket(WebSocketId.url);
          WebSocketId = this.noticeSocketLink;
          if(i == 5){
            clearInterval(myVar);
            // location.reload();
            return
          }
          i++
        }else if(WebSocketId.readyState == 0){

        }else if(WebSocketId.readyState == 1){ // websocket重连成功
          this.linkNoticeWebsocket();
          clearInterval(hb)
          clearInterval(myVar)
        }
      },4*1000)
    }
  }, 15000)
},

以上是关于webSocket使用心跳包实现断线重连的主要内容,如果未能解决你的问题,请参考以下文章

uniapp即时聊天 websocket封装(建立连接断线重连心跳机制主动关闭)

websocket封装使用心跳检测断线重连

uniapp小程序webSocket封装、断线重连、心跳检测

WebSocket 断线重连引入心跳的原因

Netty 实现心跳机制与断线重连

Netty 如何实现心跳机制与断线重连?