netty的斷線重連問題


手里的這個項目需要作為客戶端,不斷的接收服務端發來的數據,用的netty框架,但是一直存在一個問題,就是斷線重連問題。

什么是斷線重連呢?

就是我們這個客戶端要保證一直與服務端保持連接,這樣客戶端才能顯示實時的數據給客戶,為了保證這個連接一直在,就得不斷的去判斷這個連接是否還在,如果不在了,就重新連接。

在handler中有個channelInactive方法,可以監聽到連接的斷開事件。我們可以重寫這個方法,比如在這個方法中做重連操作,那么連接斷開的時候,就會觸發這個方法,來重新連接服務端。

@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
    super.channelInactive(ctx);
}

 

但是非正常的斷開,比如服務端突然掛了,或者網線突然斷了,都無法觸發這個方法,那么針對這些可能性,就需要另外處理了。

對此我發現,在這些意外情況發生后,如果給服務端寫數據,這時肯定是會操作失敗的,在寫失敗時,這個channelInactive方法被觸發了,這樣就好辦了。

首先我們加一個監聽,如果兩分鍾內沒有收到來自服務端的任何數據,我們就向服務端寫數據,如果寫失敗了,那么就會去觸發我們的channelInactive方法,就會去重連了。

搞定!

 


免責聲明!

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



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