php做断线重连,WebSocket掉线重连的解决办法(reconnecting-websocket.js的使用)

html5 的 WebSocket 帮我们实现了长连接功能,但实际使用中发现 WebSocket 链接还是不是非常稳定的,经常自我掉线了,下面就分享两种方法解决一下这个问题。

方法一

ReconnectingWebSocket 是一个小型的 JavaScript 库,封装了 WebSocket API 提供了在连接断开时自动重连的机制。

只需要简单的将:

ws = new WebSocket('ws://....');

替换成:

ws = new ReconnectingWebSocket('ws://....');

方法二

非常严格的解决 webSocket 重连,包括网络断线后重连的解决方法:

1、websocket 重连的脚本(reconnecting-websocket.js):

2、监听网络状态的脚本(offline.js):

https://github.com/hubspot/offline

3、页面引用:上述脚本

4、JavaScript demo

var socketStatus=false;

function tanchuang(){

Offline.check();

if(!socketStatus){

$('.big_toast div').html('网络连接已断开!');

$('.big_toast').css('left', '45%');

$('.big_toast').fadeIn("fast");

$('.big_toast').fadeOut(2000);

if(Offline.state === 'up' && websocket.reconnectAttempts>websocket.maxReconnectInterval){

window.location.reload();

}

// buildSocket();

}else{

websocket.send("{}");

}

}

var websocket;

buildSocket();

function buildSocket(){

if ('WebSocket' in window) {

websocket = new ReconnectingWebSocket("ws://http://www.phpernote.com/websocket/get/overview");

} else if ('MozWebSocket' in window) {

// websocket = new MozWebSocket("ws://http://www.phpernote.com/websocket/get/all/data/rt");

websocket = new MozWebSocket("ws://http://www.phpernote.com/websocket/get/overview");

} else {

// websocket = new SockJS("http://www.phpernote.com/sockjs/websocket/get/all/data/rt");

websocket = new SockJS("http://host/websocket/get/overview");

}

}

websocket.onopen = function (evnt) {

socketStatus=true;

clearInterval(t1);//去掉定时器

t2=setInterval(tanchuang,3000);

// tanchuang();

};

websocket.onmessage = function (evnt) {

};

websocket.onerror = function (evnt) {

socketStatus=false;

};

websocket.onclose = function (evnt) {

socketStatus=false;

};

最终的效果是:当网络断开连接后,会先重连3000次,如果3000次重连不上则浏览器放弃重连,开始监听网络状态,如果网络一恢复,则直接刷新页面,恢复数据正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值