websocket断线重连与停止重连
作者:互联网
先上代码:
// 获取ip + 端口
var wsUrl ="ws://" + window.location.host + "/webSocket";
// 避免重复连接
var lockReconnect = false;
var ws;
// 定时任务
var tt;
function createWebSocket() {
try {
ws = new WebSocket(wsUrl);
init();
} catch(e) {
console.log('catch' + e);
reconnect();
}
}
function init() {
ws.onclose = function (e) {
console.log('链接关闭' + e.code + new Date().getTime());
// 服务器关闭 不重连
if (e.code != 1006){
reconnect();
}
};
ws.onerror = function(e) {
console.log('发生异常了' + new Date().getTime());
};
ws.onopen = function (e) {
console.log('连接成功' + new Date().getTime());
};
ws.onmessage = function (e) {
console.log('接收到消息' + e.data + new Date().getTime());
}
}
function reconnect() {
if(lockReconnect) {
return;
};
lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多, 有定时任务 先取消再设置
tt && clearTimeout(tt);
tt = setTimeout(function () {
createWebSocket();
lockReconnect = false;
}, 2000);
}
问题1:如何保证断线重连?
答:ws.onclose方法中检测到连接关闭便会调用reconnect()方法,重新创建连接。
问题2:ws.onerror中为什么不调用重连方法?
答:ws.onerror方法触发后会自动调用ws.onclose方法。无需写重复代码
问题3:什么情况下停止重连?
答:服务器挂掉的时候,根据状态码判断,是否停止重连。避免前台一直发送连接请求导致网页卡死。
状态码释义参见:websocket状态码
websocket前后端调用顺序可以参考我的另一篇文章:java+websocket前后端调用过程解析
如有其他问题,欢迎留言讨论!
标签:function,websocket,log,console,ws,new,断线,重连 来源: https://blog.csdn.net/bestonetwothree/article/details/112755597