保持websocket長連接 心跳檢測

$(function () {
        createWebSocket(wsServer);//建立socket連接
    
});

    //WebSocket連接後臺開始
    var lockReconnect = false;  //避免ws重複連接
    var ws = null;
    var wsServer = "";//ws地址
    var httpServer = "";//http地址
    //創建WebSocket對象
    function createWebSocket(wsServer){
    if ('WebSocket' in window) {
        ws = new WebSocket(wsServer);
    } else if ('MozWebSocket' in window) {
        ws = new MozWebSocket(wsServer);
    } else {
        ws = new SockJS(httpServer);
    }
    // Socket創建並連接
    ws.onopen = function(evt) {
         heartCheck.reset().start(); 
//        layer.msg("已建立連接正在聊天", {
//            offset : 0
//        });
        //return;
    };
    // Socket 消息傳遞監聽
    ws.onmessage = function(evt) {
         heartCheck.reset().start();  
         analysisMessage(evt.data); //解析後臺傳回的消息,並予以展示
    };
    // Socket異常監聽
    ws.onerror = function(evt) {
        console.log("產生Socket異常");
        reconnect(wsServer);
    };
    // Socket關閉監聽
    ws.onclose = function(evt) {
        console.log("已關閉Socket連接");
        reconnect(wsServer);
        //return;
    
    };
    //WebSocket連接後臺結束
    }

    
    function reconnect(url) {
        if(lockReconnect) {
            return;
        }
        lockReconnect = true;
        setTimeout(function () {    
            createWebSocket(url);
            lockReconnect = false;
        }, 2000);
    }

    /**
     * 發送信息給後臺
     */
    function sendMessage() {
        if (ws == null) {
            layer.msg("未開啓Socket連接!", {
                offset : 0,
                shift : 6
            });
            return;
        }
        var message = $("#message").val();
        if (message == null || message == "") {
            layer.msg("發送內容不能爲空!", {
                offset : 0,
                shift : 6
            });
            return;
        }
        // 客戶端向服務端發送消息
        ws.send(JSON.stringify({
            message : {
                //發送的消息內容給服務器
            }
        }));
    }

    //解析後臺傳回的消息,並予以展示
    function analysisMessage(message) {
        console.log(JSON.parse(message)) 
        message = JSON.parse(message);
    }
    


    
    //心跳檢測
    var heartCheck = {
            timeout: 60000,//60秒
            timeoutObj: null,
            reset: function(){
                clearTimeout(this.timeoutObj);
                return this;
            },
            start: function(){
                this.timeoutObj = setTimeout(function(){
                    //onmessage拿到返回的心跳就說明連接正常
                    console.log("心跳檢測");
                    ws.send("心跳檢測");
                }, this.timeout)
            }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章