Netty的心跳檢測機制

一般的心跳檢測機制都是定時向服務端請求或服務端定時向客戶端發送數據以確認連接是否存活。
這種情況一般存在兩個問題:
一、請求會佔用通道的資源,如果判斷連接是否屬於空閒;
二、定時任務維護成本;
Netty提供了IdleStateHandler 來進行心跳檢測。
通過使用ch.pipeline().addLast(new IdleStateHandler(0,0,5, TimeUnit.SECONDS))將心跳檢測加入到pipeline中netty會在設定的延遲時間內主動發起IdleStateEvent事件,可以在任意一個handler中來處理這個事件

    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if(evt instanceof IdleStateEvent){
            ...
        }
        super.userEventTriggered(ctx, evt);
    }

IdleStateHandler構造方法有4個參數

int readerIdleTimeSeconds  //讀超時時間
int writerIdleTimeSeconds  //寫超時時間
int allIdleTimeSecond      //所有事件超時時間
TimeUnit unit			   //超時時間單位
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章