首先要有心跳包檢測的類 設定多少時間沒有在通道裏面讀取到信息則判定為斷線,把通道清除掉。
使用Netty實現心跳檢測:
新建Java工程,並導入netty使用的jar包,最好將源碼包也放在本工程下,便於了解netty的源碼實現。
可以從netty自帶的example中復制壹個例子過來,在此基礎上進行修改。
在此基礎上對代碼進行改造。打開EchoServer.java,添加空閑檢測類。
編寫心跳檢測處理類。並將此類添加到pinpline的handler裏面。
改造完了服務端,需要對客戶端內容改造壹下。啟動客戶端後,先發壹個“hello”消息,然後等候服務端心跳信息“ping”,收到心跳後,回復心跳響應“ok”。心跳消息可以根據需要進行定義。修改的類為EchoClientHandler。
為方便查看可以將netty的日誌打開。
即:將此句p.addLast(new LoggingHandler(LogLevel.INFO));前面的註釋去掉,執行測試壹下。查看服務端,可以看到心跳包和心跳響應。
將客戶端回復心跳的內容刪除,再執行查看結果。此時可以看到服務端在30秒內沒有收到心跳,認為客戶端連接出現問題,將此連接關閉。