Java NIO-检测闭合连接

Java NIO-检测闭合连接,java,tcp,nio,Java,Tcp,Nio,我已经编写了一个使用JavaNIOAPI执行非阻塞IO的服务器。我看到这样一种情况:有时客户端应用程序突然关闭(例如,由于断电),服务器端的连接保持打开状态 一位同事也遇到了同样的问题,他说他用心跳来检测这种东西,但我希望有一种更简单的方法。还有其他人遇到过这个问题吗 一些附加信息:如果在尝试读/写操作时捕捉到IOException,我当前的服务器设计将取消一个键并关闭相应的通道。这种方法似乎在99%的情况下有效;我只见过少数情况下连接似乎处于打开状态。如果没有应用程序级心跳,您唯一的选择就是依

我已经编写了一个使用JavaNIOAPI执行非阻塞IO的服务器。我看到这样一种情况:有时客户端应用程序突然关闭(例如,由于断电),服务器端的连接保持打开状态

一位同事也遇到了同样的问题,他说他用心跳来检测这种东西,但我希望有一种更简单的方法。还有其他人遇到过这个问题吗


一些附加信息:如果在尝试读/写操作时捕捉到
IOException
,我当前的服务器设计将取消一个键并关闭相应的通道。这种方法似乎在99%的情况下有效;我只见过少数情况下连接似乎处于打开状态。

如果没有应用程序级心跳,您唯一的选择就是依赖TCP keepalive。但是默认的时间间隔很长(比如2小时)。RFC不建议间隔小于2小时

您可以将其缩短,但这是一个系统范围的参数。在某些操作系统上,甚至需要重建内核来改变这一点


因此,强烈建议对任何基于TCP的协议使用心跳。

谢谢ZZ编码器-这就是我的想法(担心)。我很惊讶这不是TCP的一个特性。