简单实现webSocket + 心跳机制

import { baseUrl } from "../assets/js/baseUrl";

class WS {
  ws: any | null = null;
  timeOut: number = 5000;
  timer: any = null;
  serverTimer: any = null;
  connect() {
    this.ws = new WebSocket(baseUrl);
    this.ws.onopen = function() {
      this.initHeart(); //启动心跳机制
      console.log("连接成功");
    };
    this.ws.onmessage = function(evt: any) {
      this.initHeart(); //重置心跳机制
      var received_msg = evt.data;
      console.log("数据已接收...");
    };
    this.ws.onerror = function() {};
    this.ws.onclose = function() {
      // 关闭 websocket
      console.log("关闭");
    };
  }
  close() {
    this.ws.close();
  }
  send(msg: string) {
    this.ws.send(msg);
  }
  heart() {
    this.timer = setTimeout(() => {
      this.ws.send("心跳检测");
      this.serverTimer = setTimeout(() => {
        //如果超过一定时间还没重置,说明后端主动断开了
        this.ws.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
      }, this.timeOut);
    }, this.timeOut);
  }
  initHeart() {
    this.timer && clearTimeout(this.timer);
    this.serverTimer && clearTimeout(this.serverTimer);
    this.heart();
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值