tru*_*tin 22
在客户端关闭套接字close()并且TCP关闭握手已成功完成的常见情况下,将触发channelInactive()(或channelClosed()3)事件.
但是,在一个不寻常的情况下,例如客户端计算机由于断电或拔下的LAN电缆而脱机,可能需要很长时间才能发现连接实际已关闭.要检测这种情况,您必须定期向客户端发送一些消息,并期望在一定时间内收到响应.这就像一个ping - 您应该在协议中定义一个定期的ping和pong消息,除了检查连接的健康状况之外几乎什么都不做.
或者,您可以启用SO_KEEPALIVE,但此选项的keepalive间隔通常取决于操作系统,我不建议使用它.
为了帮助用户相对容易地实现这种行为,Netty提供了ReadTimeoutHandler.配置管道,以便ReadTimeoutHandler在一段时间内没有入站流量时引发异常,并在exceptionCaught()处理程序方法中关闭异常上的连接.如果您是应该发送定期ping消息的一方,请使用计时器(或IdleStateHandler)发送它.