Websocket 斷線重連及心跳問題解決方案

2021-09-13 18:18:54 字數 1746 閱讀 3746

為描述方便,先將簡單的 websocket 連線函式ws_connect()貼出來,ws為 websocket 物件:

var ws;

/** * 連線 websocket

* @param func onopen要執行的函式,可以為空

*/function

ws_connect

(func)

; ws.

onopen

=function

(e)}

; ws.

onerror

=function

(e);

ws.onclose

=function

(e);}$

(function()

; ws.

send

(json

.stringify

(data));

};// 頁面載入時第一次連線,也可以傳空

ws_connect

(func);}

);

重新連線的時候 websocket 的屬性 readystate 有著至關重要的作用,先了解一下這個屬性的含義(以下其中之一):

除了第一次連線,每一次連線時都必須考慮當前的連線狀態,比如我要執行ws.send(data);,在四種狀態下的執行時機是不同的,如下:

這樣每次傳送資料都能保證連線成功(除非網路斷了或伺服器掛了),寫乙個函式ws_execute()封裝這些操作,這個函式如下:

/**

* 根據連線狀態單執行緒連線 websocket

* @param func onopen要執行的函式,可以為空

*/function

ws_execute

(func)};

}else

if(ws.readystate ==1)

}else

if(ws.readystate ==2)

;}else

if(ws.readystate ==3)

}

業務邏輯裡傳送資料是這樣的(**片斷):

// 傳送資料時,將**構造成函式作為引數,等 onopen 時執行

varfunc

=function()

; ws.

send

(json

.stringify

(data));

};ws_execute

(func)

;

有了上面的ws_execute()函式,心跳就簡單了,比如每1分鐘向伺服器傳送一次資料:

var ws_heart_i =

null

;/**

* websocket 每1分鐘發一次心跳

*/function

ws_heart()

; ws.

send

(json

.stringify

(data));

};ws_execute

(func);}

,60000);

}

ws_heart()函式放在ws.onopen裡就可以了。

websocket 斷線重連

摘要websocket reconnect websocket是html5發布之後出現的一種新技術,說它是新技術,其實也不是多新的技術了,因為畢竟也有2 3年了,但是找了很多國內的例項,缺發現不多,不知道是它不好用呢,還是說這種技術原來就有缺陷呢,咱們暫且不說,今天我們就來介紹一下websocket...

websocket 斷線重連

服務端為swoole 的websocket 客戶端js 1.建立websocket客戶端 var wsserver ws ip var limitconnect 3 斷線重連次數 var timeconnect 0 websocketinit wsserver socket初始化 function ...

websocket斷線重連

1 需求 最近做了乙個需要實時展示硬體狀態的專案,需要用到websocket,於是在 sockjs client 基礎上二次封裝了一下 2 思路 封裝的目的主要是起到乙個斷線重連的目的,利用websocket斷線會觸發onclose方法判斷是否重連 import sockjs from sockjs...