在JBoss Netty中当客户端意外关闭时收到通知

在JBoss Netty中当客户端意外关闭时收到通知,netty,Netty,Netty服务器端是否有侦听器,当客户端意外关闭时(例如,当客户端m/c中的LAN电缆被移除时),将通知侦听器。未调用DefaultChannelHandler中的任何方法。假设在拔下LAN电缆时,客户端处于非活动状态(不发送/接收任何数据) 或者我们必须在服务器端实现一个保持活动的监视器来检查通道是否有效?实际上,没有办法检测TCP/IP中意外断开的连接。如果有办法做到这一点,则不应称之为“意外”。:-) 检测断开连接最可靠的方法是定期发送消息或等待超时消息,例如发送ping消息 要实现此行为

Netty服务器端是否有侦听器,当客户端意外关闭时(例如,当客户端m/c中的LAN电缆被移除时),将通知侦听器。未调用DefaultChannelHandler中的任何方法。假设在拔下LAN电缆时,客户端处于非活动状态(不发送/接收任何数据)


或者我们必须在服务器端实现一个保持活动的监视器来检查通道是否有效?

实际上,没有办法检测TCP/IP中意外断开的连接。如果有办法做到这一点,则不应称之为“意外”。:-)

检测断开连接最可靠的方法是定期发送消息或等待超时消息,例如发送ping消息

要实现此行为,可以使用
IdleStateHandler
。将其插入管道并使处理程序扩展
IdleStateAwareChannelHandler
IdleStateAwareChannelUpstreamHandler


或者,如果客户机和服务器在一个控制良好的网络(如LAN)中运行,您可以配置您的操作系统,以便它更频繁地发送TCP保持活动数据包。有关更多信息,请参阅。然而,我怀疑这在广域网环境下能否可靠地工作。(如果有人在WAN环境中尝试TCP keepalive timeout,请分享您的故事。)

您是否尝试过向管道中添加
ReadTimeoutHandler
?我相信这会在服务器在给定的秒数内没有从通道读取数据后引发一个
ReadTimeoutException


我只在客户机上使用它来实现重新连接(如正常运行时间示例),但它在这里也可以工作。

设计并实现了故障关闭保持活动。重要的是在超时后关闭频道,然后重新打开。

谢谢信任。将尝试上述行为。我在服务器中使用IdleStateHandler,并从客户端使用定期ping机制。成功了:)