為描述方便,先將簡單的 websocket 連線函式ws_connect()
貼出來,ws
為 websocket 物件:
重新連線的時候 websocket 的屬性 readystate 有著至關重要的作用,先了解一下這個屬性的含義(以下其中之一):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);}
);
除了第一次連線,每一次連線時都必須考慮當前的連線狀態,比如我要執行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...