Netty心跳之IdleStateHandler

概述:Netty提供了對心跳機制的天然支持,心跳可以檢測遠程端是否在線

心跳機制的優(yōu)勢:

  1. 心跳可以檢測遠程端是否在線,
    2.心跳可以維持客戶端與服務(wù)器長連接,避免連接被防火墻,路由器關(guān)停等

IdleStateHandler介紹:

public class IdleStateHandler implements ChannelHandler {
    //構(gòu)造器
    public IdleStateHandler(
        long readerIdleTime,
        long writeIdleTime,
        long allIdleTime,
        TimeUnit unit    
    )
    
}

構(gòu)造器參數(shù)說明:

  1. readerIdleTime:為讀超時時間
    2.writerIdleTime:為寫超時時間
    3.allIdleTime:所有類型的超時時間

使用例子:

new ChannelInitializer<SocketChannel>() {
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        /**
        * 配置心跳機制
        * 說明:每隔五秒檢查channelRead方法,如果五秒內(nèi)該方法沒有被調(diào)用上則會調(diào)用
        * userEventTriggered方法。(五秒內(nèi)服務(wù)器沒有返回響應(yīng),可能說明服務(wù)器下線,
        * 調(diào)用userEventTriggered方法告知客戶端進行處理)
        */
        pipeline.addLast(new IdleStateHeader(5,0,0,TimeUnit.SECONDS));
        //配置:發(fā)送數(shù)據(jù)加密coder
        pipeline.addLast(new RpcEncoder(new GSONSerializer()));

        //配置:接收數(shù)據(jù)解密coder
        pipeline.addLast(new RpcDecoder(new GSONSerializer()));

        //配置:業(yè)務(wù)處理Handler
        pipeline.addLast(clientHandler);
        //配置:心跳包Handler
        pipeline.addLast(new Pinger());
    }
}

IdleStateHeader超時狀態(tài)說明

IdleStateEvent
-IdleState

  • IdleState.READER_IDLE 讀超時事件類型
  • IdleState.WRITER_IDLE 寫超時事件類型
  • IdleState.ALL_IDL 讀或者超時事件超時類型

超時異常處理方法 userEventTriggered

public void userEventTriggered( ChannelHandlerContext ctx, Object evt)
evt 此時的類型為 IdleStateEvent,可通過getState()判斷異常類型

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

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

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