Netty如何实现心跳机制与断线重连?( 三 )

\n

writerIdleTimeSeconds: 写超时. 即当在指定的时间间隔内没有数据写入到Channel时 会触发一个WRITER_IDLE的IdleStateEvent事件.

\n

allIdleTimeSeconds: 读/写超时. 即当在指定的时间间隔内没有读或写操作时 会触发一个ALL_IDLE的IdleStateEvent事件.

\n

注:这三个参数默认的时间单位是秒 。 若需要指定其他时间单位 , 可以使用另一个构造方法:IdleStateHandler(boolean observeOutput long readerIdleTime long writerIdleTime long allIdleTime TimeUnit unit)

\n

在看下面的实现之前 , 建议先了解一下IdleStateHandler的实现原理 。

\n

下面直接上代码 , 需要注意的地方 , 会在代码中通过注释进行说明 。

\n

使用IdleStateHandler实现心跳

\n

下面将使用IdleStateHandler来实现心跳 , Client端连接到Server端后 , 会循环执行一个任务:随机等待几秒 , 然后ping一下Server端 , 即发送一个心跳包 。 当等待的时间超过规定时间 , 将会发送失败 , 以为Server端在此之前已经主动断开连接了 。 代码如下:

推荐阅读