2018-09-10 netty心跳以及斷線重連

使用 Netty 實(shí)現(xiàn)心跳機(jī)制的關(guān)鍵就是利用?IdleStateHandler?來產(chǎn)生對(duì)應(yīng)的 idle 事件.

一般是客戶端負(fù)責(zé)發(fā)送心跳的 PING 消息, 因此客戶端注意關(guān)注?ALL_IDLE?事件, 在這個(gè)事件觸發(fā)后, 客戶端需要向服務(wù)器發(fā)送 PING 消息, 告訴服務(wù)器"我還存活著".

服務(wù)器是接收客戶端的 PING 消息的, 因此服務(wù)器關(guān)注的是?READER_IDLE?事件, 并且服務(wù)器的?READER_IDLE?間隔需要比客戶端的?ALL_IDLE?事件間隔大(例如客戶端ALL_IDLE 是5s 沒有讀寫時(shí)觸發(fā), 因此服務(wù)器的 READER_IDLE 可以設(shè)置為10s)

當(dāng)服務(wù)器收到客戶端的 PING 消息時(shí), 會(huì)發(fā)送一個(gè) PONG 消息作為回復(fù). 一個(gè) PING-PONG 消息對(duì)就是一個(gè)心跳交互.

斷線重連的關(guān)鍵一點(diǎn)是檢測連接是否已經(jīng)斷開. 因此我們改寫了 ClientHandler, 重寫了?channelInactive?方法. 當(dāng) TCP 連接斷開時(shí), 會(huì)回調(diào) channelInactive 方法, 因此我們在這個(gè)方法中調(diào)用 client.doConnect() 來進(jìn)行重連.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容