websocket的一个问题请教?
发布于 6 年前 作者 leijie 2399 次浏览 来自 问答

app.js

initWebsocket() {
    var that = this
    this.checkVersion();
    //建立连接
    wx.connectSocket({
      url: this.mag.wsHost
 
    })
 
    //连接成功
    wx.onSocketOpen(function () {
      console.log('ws连接成功');
    })
 
    //连接失败
    wx.onSocketError(function () {
      console.log('ws连接失败');
    })
    wx.onSocketClose(function (res) { // 监听WebSocket关闭
      wx.connectSocket({
        url: that.mag.wsHost
      })
 
    })

  },



keepAlive() {

setInterval(

() => {

var obj = { 'wsType': 'KEEPALIVE' }

console.log("发送心跳包")

wx.sendSocketMessage({

data: JSON.stringify(obj),

});


}

, 30000);


},



上面的代码  初始化了websocket 并且第30秒会重连

现在有一个问题 比如我退出小程序后   超过30秒再进入小程序  websocket是断掉了的   请问有什么解决办法   因为app.js只会执行一次的

在线等

2 回复

app.onshow的地方处理心跳,清空原来计时器,开始新的心跳计时器

data: {
   //存储计时器
   setInter: ''

 },




onShow: function () {

clearInterval(this.setInter)

   var that = this;

   this.initWebsocket();

   this.keepAlive()

},


initWebsocket() {

   var that = this

wx.connectSocket({

url: this.mag.wsHost


})


//连接成功

wx.onSocketOpen(function () {

console.log('ws连接成功');

})


//连接失败

wx.onSocketError(function () {

console.log('ws连接失败');

})

wx.onSocketClose(function (res) {

console.log('xxxx') // 监听WebSocket关闭

wx.connectSocket({

url: that.mag.wsHost

})


})

},

keepAlive() {

 this.setInter=

setInterval(

() => {

       var obj = { 'wsType': 'KEEPALIVE' }

console.log("发送心跳包")

wx.sendSocketMessage({

data: JSON.stringify(obj),

});


}

, 10000);

}




看这个写法有什么问题 试了一下还是不行的

回到顶部