websocket心跳检测和重连机制(复制即用)

data() {
  return {
    wsurl: 'ws://127.0.0.1:8080',
    websock: null,
    lockReconnect: false,
    timerReconnect: null,
    heartTimeout: null,
    serverTimeout: null
  };
},
created() {
  this.createWebSocket();
},
beforeDestroy() {
  if (this.websock) this.websock.close();
},
// 创建websocket
createWebSocket() {
  try {
    this.websock = new WebSocket(this.wsurl);
    this.initWebSocket();
  } catch (e) {
    console.log('catch', e);
    this.reconnect();
  }
},
initWebSocket() {
  this.websock.onmessage = (e) => {
    console.log('数据接收', e);
    // 拿到pong说明当前连接是正常的
    if (e.data === 'pong') {
      this.heartCheck();
    }
  };
  this.websock.onopen = () => {
    console.log('连接成功', this.websock);
    this.heartCheck();
  };
  this.websock.onerror = () => {
    console.log('连接失败');
    this.reconnect();
  };
  this.websock.onclose = (e) => {
    console.log('断开连接', e);
    this.reconnect();
  };
},
// 重连
reconnect() {
  if (this.lockReconnect) {
    return;
  }
  console.log('发起重连');
  this.lockReconnect = true;
  // 没连接上会一直重连,设置延迟
  this.timerReconnect && clearTimeout(this.timerReconnect);
  this.timerReconnect = setTimeout(() => {
    this.createWebSocket();
    this.lockReconnect = false;
  }, 3 * 1000);
},
// 心跳检测
heartCheck() {
  this.heartTimeout && clearTimeout(this.heartTimeout);
  this.serverTimeout && clearTimeout(this.serverTimeout);
  this.heartTimeout = setTimeout(() => {
    // 发送一个心跳包
    console.log('发送ping');
    this.websock.send('ping');
    // 计算答复的超时时间
    this.serverTimeout = setTimeout(() => {
      this.websock.close();
      console.log('答复超时');
    }, 5 * 1000);
  }, 4 * 1000);
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Websocket是基于TCP协议的双向通信协议,由于网络的不稳定性,可能会出现连接断开的情况。为了避免这种情况,我们可以采用心跳检测重连机制来保证Websocket连接的稳定性。 1. 心跳检测 心跳检测是指定时向服务端发送一个特定的消息来确认连接是否正常。如果服务端在一定时间内没有收到客户端发送的心跳消息,就可以断开连接。 客户端可以通过以下几种方式实现心跳检测: - 定时发送心跳包:客户端定时向服务端发送心跳包,服务端收到后就知道客户端还在连接。 - 客户端主动询问服务端:客户端可以发送一个询问消息给服务端,服务端如果收到了这个消息就说明客户端还在连接。 - 采用WebSocket API中的ping/pong机制WebSocket API提供了ping/pong机制,客户端可以发送ping消息给服务端,服务端收到后就会回复pong消息,客户端收到pong消息就说明连接还在。 2. 重连机制Websocket连接断开后,客户端需要采取一些措施来重新建立连接。常见的重连机制有以下几种: - 定时重连:客户端可以定时尝试重新连接服务端,这种方式简单,但可能会浪费资源。 - 指数退避算法:客户端在重连时可以采用指数退避算法,每次重连的时间间隔逐渐增加,避免重连时同时向服务端发送大量请求。 - 使用备用服务器:客户端可以在连接断开时尝试连接备用服务器,如果备用服务器可以正常工作,就可以避免连接中断的情况。 以上就是Websocket心跳检测重连机制的介绍,希望能够对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值