博主信息
博文 143
粉丝 1
评论 0
访问量 425340
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
WebSocket掉线重连的解决办法
弘德誉曦的博客
原创
10806人浏览过

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

阅读文字大小:【小】   【大】    文章背景:            展开

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

方法一

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

只需要简单的将:

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

替换成:

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

websocket 重连的脚本下载地址:https://github.com/joewalnes/reconnecting-websocket

方法二

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

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

https://github.com/joewalnes/reconnecting-websocket

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

https://github.com/hubspot/offline

3、页面引用:上述脚本

4、JavaScript demo

01var socketStatus=false;
02function tanchuang(){
03    Offline.check();
04    if(!socketStatus){
05        $('.big_toast div').html('网络连接已断开!');
06        $('.big_toast').css('left', '45%');
07        $('.big_toast').fadeIn("fast");
08        $('.big_toast').fadeOut(2000);
09        if(Offline.state === 'up' && websocket.reconnectAttempts>websocket.maxReconnectInterval){
10            window.location.reload();
11        }
12    //    buildSocket();
13    }else{
14        websocket.send("{}");
15    }
16}
17var websocket;
18buildSocket();
19function buildSocket(){
20        if ('WebSocket' in window) {     
21            websocket = new ReconnectingWebSocket("ws://http://www.phpernote.com/websocket/get/overview");
22        } else if ('MozWebSocket' in window) {
23            //   websocket = new MozWebSocket("ws://http://www.phpernote.com/websocket/get/all/data/rt");
24            websocket = new MozWebSocket("ws://http://www.phpernote.com/websocket/get/overview");
25        } else {
26            //   websocket = new SockJS("http://www.phpernote.com/sockjs/websocket/get/all/data/rt");
27            websocket = new SockJS("http://host/websocket/get/overview");
28                      
29        }
30         
31}
32websocket.onopen = function (evnt) {
33    socketStatus=true;
34    clearInterval(t1);//去掉定时器
35    t2=setInterval(tanchuang,3000);
36    // tanchuang();
37};
38websocket.onmessage = function (evnt) {
39};
40websocket.onerror = function (evnt) {
41    socketStatus=false;
42};
43websocket.onclose = function (evnt) {
44    socketStatus=false;
45};

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

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学