websocket斷線重連的方法


我們在是有websocekt的時候,有的時候由於某些原先websocket會斷開連接,我們需要重現連接,該如何實現呢?這就需要我們仔細研究websocket的api的使用了。

 

首先我們要熟悉如下幾個api

1、連接websocket的服務器的websocekt函數

2、websocekt斷開后觸發的onclose函數

 

由上面這兩個函數就可以了,大致思路梳理一下:

1、首先開發一個函數websocketinit,函數主要是websocket的連接邏輯,監聽信息,發送信息

2、監聽onclose事件,onclose觸發后重新執行websocketinit事件

 

思路有了大致代碼如下:

  function webSocketInit(service){
   //1、初始化ws
   //2、監聽onclose事件 重新執行websocketInit函數
  }

 

具體代碼如下:

//1.創建websocket客戶端
var host = window.location.host; #IP
var ut = "{{ ut }}";
var wsServer = 'wss://' + host + '/notify/wxlogin?ut=' + ut;

var timeConnect = 0;
webSocketInit(wsServer);

//socket初始化
function webSocketInit(service) {
    var ws = new WebSocket(service);
    ws.onopen = function () {
        console.log("已連接TCP服務器");
        ws.send('Hello WebSockets!');

    };
    ws.onmessage = function (evt) {
        console.log('Received Message: ' + evt.data);

        data = JSON.parse(evt.data);
        console.log(data);
        if (data.status != 0) {
            alert("掃碼錯誤");
            ws.close();
        }
        if (data.data.wx_login == 1) {
            //window.location.href = "http://" + host + "/admin"
            window.location.href = "/admin"

        }
        if (data.data.wx_login == 0) {
            //alert(data.data.message)
            $(".qr_code").css("display", "none");
            $(".tips").text(data.data.message)

        }
        console.log(data.data);
    };

    ws.onclose = function () {
        console.log('服務器已經斷開');
        reconnect(service);
    };
}

// 重連
function reconnect(service) {
    // lockReconnect加鎖,防止onclose、onerror兩次重連
    timeConnect++;
    console.log("" + timeConnect + "次重連");
    // 進行重連
    setTimeout(function () {
        webSocketInit(service);
    }, 1000);

}


// 心跳 * 回應
setInterval(function () {
    var websocket = new WebSocket(wsServer);
    websocket.send('');

}, 1000 * 100)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM