TCP保持活动以确定客户端是否在netty中断开连接

我试图确定一个客户端是否已经关闭了netty的套接字连接.有没有办法做到这一点?
最佳答案
在通常情况下,客户端通过close()关闭套接字,TCP关闭握手已成功完成,则会触发3)事件中的channelInactive()(或channelClosed()).

然而,在一个不寻常的情况下,例如客户端机器由于断电或拔出LAN电缆而脱机,可能需要很多时间,直到您发现连接实际上已经关闭.要检测这种情况,您必须定期向客户端发送一些消息,并期望在一定时间内收到其响应.这就像一个ping – 你应该在协议中定义一个定期的ping和pong消息,实际上什么都不做,但检查连接的健康状况.

或者,您可以启用SO_KEEPALIVE,但此选项的保持活动间隔通常与操作系统相关,我不建议使用它.

为帮助用户相对轻松地实现这种行为,Netty提供了ReadTimeoutHandler.配置您的流水线,以便在一段时间内没有入站流量时,ReadTimeoutHandler引发异常,并关闭exceptionCaught()处理程序方法中异常的连接.如果您是派生定期ping消息的派对,请使用定时器(或IdleStateHandler)发送.

转载注明原文:TCP保持活动以确定客户端是否在netty中断开连接 - 代码日志