微信小程序WebSocket心跳检测与断来重连

为什么要心跳检测

使用微信小程序WebSocket时,WebSocket在一定的时间没有进行通信就会断开连接,所以需要使用心跳检测。
那么心跳检测是什么呢,心跳检测顾名思义就是和人心脏动一样,客户端在一定的时间间隔内给服务器发送信息,服务器再返回预定好的信息,防止WebSocket断开。这样就是心跳监测了。

  1. 这是心跳的代码
let heartCheck = {
  timeout: 100000, 
  timeoutObj: null,
  serverTimeoutObj: null,
  //清除定时器
  reset: function () {
    clearTimeout(this.timeoutObj);
    clearTimeout(this.serverTimeoutObj);
    return this;
  },
  start: function () {
     //  发送约定好的信息
    this.timeoutObj = setTimeout(()=> {
      let msg={
        msg:'ping',
        toUser:'root'
       }
       wx.sendSocketMessage({
       data:JSON.stringify(msg)})
       const that=this;
       //连接WebSocket
      this.serverTimeoutObj = setTimeout(() =>{
        wx.closeSocket(); 
      }, this.timeout);
    }, this.timeout);
  }
};

2.断开重新连接代码

  //重新连接,这是重新连接的代码,lockReconnect是当达到最大重新连接次数的时候不在执行重新连接的代码
reconnect(){
  console.log("重新连接");
  if (this.lockReconnect) return;
  this.lockReconnect = true;
  clearTimeout(this.timer)
  console.log(this.globalData.limit<10);
  if (this.globalData.limit<10){
    this.timer = setTimeout(() => {
      this.connectStart();
      this.lockReconnect = false;
    }, 5000);
    //limit是重新连接的次数,最大为10次
    this.globalData.limit=this.globalData.limit+1
  }
},
//我这里是在全局app.js写的,在单个页面就加在data里
  globalData: {
    limit:0,
    closure:true,
    userInfo: null
  }

3.在页面或者小程序加载的时候建立连接并加上心跳检测

  onLaunch() {
    this.connectStart()
  },
  //第一步与socket建立连接
  connectStart(){
    const that=this;
    wx.connectSocket({
      url:url+wx.getStorageSync('id'),//填写连接的网址
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
         console.log("进入聊天", res)
         this.onSocketMessage()
      },
      fail: (err) => {
        wx.showToast({
          title: '网络异常!',
        })
        console.log(err)
      },
    })

  },
      //第二步在连接成功后添加心跳监测
  onSocketMessage(){
    //接收消息
    const that=this;
    wx.onSocketMessage(function(res) {
      console.log('收到服务器内容:', JSON.parse(res.data),) 
      })
     //  连接成功
     wx.onSocketOpen((res) => {
      console.log('WebSocket 成功连接', res)
      //心跳检测
      heartCheck.reset().start()
    })
    //连接失败
    wx.onSocketError((err) => {
      console.log('websocket连接失败', err);
      重新连接
      this.reconnect()
    })
    wx.onSocketClose((res) =>{
      console.log('WebSocket 已关闭!')
      if (this.globalData.closure) {
      //重新连接
        this.reconnect()
      }else{}
    })
  },
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序可以使用 WebSocket 协议来实现实时通信。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许客户端和服务器之间进行实时数据传输。 要在微信小程序中使用 WebSocket,需要先创建一个 WebSocket 实例,然后通过该实例来发送和接收数据。以下是一个简单的示例代码: ```javascript // 创建 WebSocket 实例 var ws = wx.connectSocket({ url: 'wss://example.com/ws', }) // 监听 WebSocket 连接打开事件 ws.onOpen(function () { console.log('WebSocket 连接已打开') // 发送数据 ws.send('Hello, WebSocket!') }) // 监听 WebSocket 接收到服务器数据事件 ws.onMessage(function (data) { console.log('接收到服务器数据:', data) }) // 监听 WebSocket 连接关闭事件 ws.onClose(function () { console.log('WebSocket 连接已关闭') }) // 监听 WebSocket 连接错误事件 ws.onError(function (error) { console.error('WebSocket 错误:', error) }) ``` 在上面的示例中,我们创建了一个 WebSocket 实例并指定了要连接的服务器地址。然后,我们监听了 WebSocket 连接打开、接收数据、关闭和错误事件,并在事件发生时输出相关信息。最后,我们通过 `ws.send` 方法向服务器发送了一条消息。 需要注意的是,微信小程序中的 WebSocket 实现是基于原生 WebSocket 实现的,但也有一些差异,例如微信小程序中的 `WebSocket.send` 方法只支持发送字符串类型的数据。另外,微信小程序中的 WebSocket 实现还有一些性能和稳定性上的限制,因此在使用过程中需要注意避免过度使用和滥用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值