收藏
回答

怎么保证只建立一个websocket连接?

项目里面用到了websocket,我写了个断线重连的方法。具体是把断线重连方法写道wx.onSocketClose和wx.onSocketError这两个方法里面,手机是iphone se,调试发现。当手机突然断网再重连时候会同时触发这两个方法,导致重连了两次。然后我把wx.onSocketError删掉了,是可以重连一次的。但是有什么更好的方法保证客户端什么时候都是只建立一个socket连接?(ps:手机锁屏,应用后台时候只会触发wx.onSocketClose


最后一次编辑于  2018-08-14
回答关注问题邀请回答
收藏

2 个回答

  • 卢霄霄
    卢霄霄
    2018-08-14

    两个监听里都做个判断,是否在重连。进行重连的方法里写个布尔值,是否正在重连。

    2018-08-14
    赞同 1
    回复 13
    • 王雨
      王雨
      2018-08-14

      watchWebsocket(){

      wx.onSocketClose(function (res) {

      console.log('WebSocket 已关闭!')

      if (!this.data.reConnectFlag) {

      _this.reConnect()

      }

      })

      wx.onSocketError(function (res) {

      console.log('WebSocket 连接出错!')

      if (!this.data.reConnectFlag){

      _this.reConnect()

      }

      })

      }



      reConnect(){

      this.setData({

      reConnectFlag: false

      })

      // 重连方法

      // ...

      // 连接成功后

      this.setData({

      reConnectFlag: true

      })

      }


      是这个意思吗?


      2018-08-14
      回复
    • 卢霄霄
      卢霄霄
      2018-08-14回复王雨

      对啊。。无效吗?

      2018-08-14
      1
      回复
    • 王雨
      王雨
      2018-08-14回复卢霄霄

      无效

      2018-08-14
      回复
    • 卢霄霄
      卢霄霄
      2018-08-14回复王雨

      哇!这么怪!把console移到 if判断里面去呢。。都进去了的吗

      2018-08-14
      1
      回复
    • 王雨
      王雨
      2018-08-14回复卢霄霄

      这个逻辑有问题了,第一次断线重连是可以成功的,但是重连成功后reConnectFlag: true,第二次重连的时候会判断reConnectFlag,导致第二次不能连接

      2018-08-14
      回复
    查看更多(8)
  • 😊。
    😊。
    2018-08-15

    websocket 可以当 tcpsocket 使用吗?


    2018-08-15
    赞同
    回复 2
    • 王雨
      王雨
      2018-08-15

      不知道,没接触过tcpsocket

      2018-08-15
      回复
    • 😊。
      😊。
      2018-08-15

      恩 谢谢


      2018-08-15
      回复