收藏
回答

如何保证websocket一直连接?

问题模块
API和组件

websocket本身是长连接,但是也会有因为超时而断开连接的时候,即使在超时时间内互发心跳。我在小程序里监听到了onSocketClose,然后在app.js里加一个计时器,用connectSocket尝试连接,如果没有连接上,过若干秒(10秒),再次尝试连接,但发现虽然调用成功了,但onSocketOpen并没有监听到websocket打开,这是什么原因呢?是不是我前一次连接还没完全完成,没有返回数据,第二次尝试连接就已经开始了造成的?如果是,该如何设置过多久再次尝试连接呢?或者在onSocketError里处理再次连接?但onSocketError里面也并没有明确的返回信息能让我确定需要再次连接。要么就是onSocketClose和onSocketError里面各进行一次连接尝试?

最后一次编辑于  2017-11-28  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 江水滔滔
    江水滔滔
    2017-12-01

    哥们,试了下你的方案确实是可以。谢谢~~

    2017-12-01
    赞同
    回复
  • 彭享
    彭享
    2017-11-30

    我在定时器setInterval里面增加了closeSocket,然后在里面还增加了一个setTimeout确保在closeSocket之后若干秒再执行connectSocket。虽然不能保证100%的重新连接上,但也能保证个大概,比以前好些。

    setInterval(function(){

    if (!that.globalData.socketopened){

    wx.closeSocket({

    complete:function(){

    that.globalData.myselfCloseSocket = true;

    console.log("closeSocket complete");

    }

    })


    var room_id = -1;

    if (that.globalData.room_id != "") {

    room_id = that.globalData.room_id;

    }


    var t = setTimeout(function(){

    console.log("begin connectSocket ");

    wx.connectSocket({

    url: that.globalData.wsurl,


    success: function () {

    console.log("connectSocket again");

    },

    fail: function () {

    console.log("connectSocket failed");


    },

    complete: function () {

    clearTimeout(t);

    }

    });

    },3000);

    }

    },6000);


    2017-11-30
    赞同
    回复
  • 江水滔滔
    江水滔滔
    2017-11-30

    你好,请问你有解决吗?

    2017-11-30
    赞同
    回复