写了个聊天页面 带有消息提醒 可是发现 一旦进入手机后台或是熄屏 那么这个客户端的websocket链接会断掉。后来经过测试发现每款浏览器熄屏后断开链接的时间都不一样 似乎跟浏览器有关系。其中 使用360浏览器 写了个timer 每隔一段时间执行播放音乐 这样似乎websocket就不断联了 断了也会执行重连代码。 大家有知道这是什么原理吗 如果要保持websoket链接 有没有好点的方法
我想到一个方法,但是没有经过验证,有兴趣的话你可以尝试一下。
可以尝试启动一个WebWorker线程开启WS连接,webworker不能直接访问DOM,你只需要监听webworker返回的message就可以,让这个子线程一直活跃在后台。
还有你说的放置一段音乐一直播放的话就不会断开连接是因为即使你手机熄屏了,但是js线程还是在播放音乐,没有退出线程。
也就是说你只要保证你的js能一直在线程中,它的线程队列里面有任务的话就不会断连。
1、监听网络是否频繁断开和连接2、判断service是否被杀死3、其他原因,要看代码
问题的解决办法是,使用H5提供的页面隐藏/显示API。
document.addEventListener('visibilitychange',function() {
if(document.visibilityState=='hidden') {
that.hiddenTime = new Date().getTime() //记录页面隐藏时间
}else{
let visibleTime = new Date().getTime();
if((visibleTime-that.hiddenTime)/1000>10){ //页面再次可见的时间-隐藏时间>10S,重连
typeof that.ws.close == 'function' && that.ws.close(); //先主动关闭连接
console.log('主动关闭连接后重连');
setTimeout(function(){
that.openSocket() //打开连接,使用的vuejs,这是websocket的连接方法
},1500); //1.5S后重连
}else{
console.log('还没有到断开的时间')
}
}
});
至于为什么断开要1.5s之后再重连,当然是因为断开需要时间啊。不然ws会报错,说连接早就关闭了。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632