socket本身沒有提供重連機制,websocket也是一樣。所以重連是自己做的。
要實現websocket重連機制,首先要分析websocket的工作環境。socket的接收和傳送都是阻塞執行緒的,所以websocket一般都是用兩個執行緒分別去負責接收和傳送訊息。
這裡就以接收和傳送都是非同步為前提實現重連。
如果給websocket定義生命週期的話,我是這樣定義的。
所以websocket只能是在onlive(connected之後,disconnectting之前)期工作。我們怎麼樣知道websocket現在的狀態呢?定義websocket的狀態:
onconnectting (connectting之後,connected之前), 用socket三次握手判斷。
onconnect (connected之後,disconnectting之前) 給伺服器傳送訊息,已傳送訊息和接收訊息的時間差為基準判斷。
disconnectting(disconnecting之後,disconnected之前) socket斷開連線機制為基準。
ondisconnect (disconnected之後,connectting之前) 業務中之前儲存websocket的狀態為基準。
原則就是做到websocket的狀態不允許重複,生命執行流程不能倒置。
因為onconnectting、onconnect、disconnectting都是非同步,所以有必要分別用乙個同步的引數記錄三個時期的狀態。當處於onconnectting時期時,不做onconnect、disconnectting。其他狀態也是同樣的原則。
遵循自己定義的websocket生命週期原則,那麼重連只是重走一遍websocket的生命週期而已。
websocket心跳重連機制
1 心跳重連的原因 心跳和重連的目的用一句話概括就是客戶端和服務端保證彼此還活著,避免丟包發生。websocket斷開有兩種情況 前端斷開 在使用websocket過程中,可能會出現網路斷開的情況,比如訊號不好,或者網路臨時關閉,這時候websocket的連線已經斷開,而不同瀏覽器有不同的機制,觸發...
細說websocket快速重連機制
引言 因此,如何在網路變更時快速恢復websocket的可用,就變得尤為重要。快速了解 websocet websocket誕生於2008年,在2011年成為國際標準,現在所有的瀏覽器都已支援。它是一種全新的應用層協議,是專門為web客戶端和服務端設計的真正的全雙工通訊協議,可以模擬http協議來了...
理解WebSocket心跳及重連機制
在使用websocket的過程中,有時候會遇到網路斷開的情況,但是在網路斷開的時候伺服器端並沒有觸發onclose的事件。這樣會有 伺服器會繼續向客戶端傳送多餘的鏈結,並且這些資料還會丟失。所以就需要一種機制來檢測客戶端和服務端是否處於正常的鏈結狀態。因此就有了websocket的心跳了。還有心跳,...