◕ᴗ◕。2018,砥砺前行

不该做什么和该做什么一样重要

websocket断线重连机制

在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。因此就有了websocket的心跳了。还有心跳,说明还活着,没有心跳说明已经挂掉了。

一、心跳重连机制(考虑网络因素)

实现机制

心跳机制是每隔一段时间会向服务器发送一个数据包,告诉服务器自己还活着,同时客户端会确认服务器端是否还活着,如果还活着的话,就会回传一个数据包给客户端来确定服务器端也还活着,否则的话,有可能是网络断开连接了。需要重连~

代码实例(javascript)

var WebSocket = {};
WebSocket.init = function(uri) {
    this.wsUri = uri;
    this.lastHeartBeat = new Date().getTime();
    this.overtime = 8000;

    initChannelData();
    WebSocket.websocket = new WebSocket(WebSocket.wsUri);

    WebSocket.websocket.onopen = function(evt) {
        onOpen(evt)
    };
    WebSocket.websocket.onclose = function(evt) {
        onClose(evt)
    };
    WebSocket.websocket.onmessage = function(evt) {
        onMessage(evt)
    };
    WebSocket.websocket.onerror = function(evt) {
        onError(evt)
    };
    setInterval(checkConnect,5000);
}

function checkConnect() {
     doSend("{'event':'ping'}");
     if ((new Date().getTime() - WebSocket.lastHeartBeat) > WebSocket.overtime) {
         reConnect();
     }
 }
function onMessage(e) {
     WebSocket.lastHeartBeat = new Date().getTime();
}
/**
* 重新连接
* */
function reConnect(){
    console.log("socket 连接断开,正在尝试重新建立连接");
    WebSocket.init("");
}

二、onclose失去连接重连机制(不考虑网路因素)

实现机制

在onclose回调事件中再次连接

代码实例(javascript)

var WebSocket = {};
WebSocket.init = function(uri) {
    this.wsUri = uri;
    this.lastHeartBeat = new Date().getTime();
    this.overtime = 8000;

    initChannelData();
    WebSocket.websocket = new WebSocket(WebSocket.wsUri);

    WebSocket.websocket.onopen = function(evt) {
        onOpen(evt)
    };
    WebSocket.websocket.onclose = function(evt) {
        onClose(evt)
    };
    WebSocket.websocket.onmessage = function(evt) {
        onMessage(evt)
    };
    WebSocket.websocket.onerror = function(evt) {
        onError(evt)
    };
}
/**
* 重新连接
* */
function reConnect(){
    console.log("socket 连接断开,正在尝试重新建立连接");
    WebSocket.init("");
}

function onClose(evt) {
    console.log("DISCONNECTED")
    reConnect();
}
阅读更多
版权声明:有不足之处欢迎指出,欢迎交流 https://blog.csdn.net/qq_33594101/article/details/80320762
个人分类: javaweb
想对作者说点什么? 我来说一句

netty+websocket实现心跳和断线重连

2018年03月06日 7.84MB 下载

没有更多推荐了,返回首页

不良信息举报

websocket断线重连机制

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭