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