Java NIO-检测闭合连接
我已经编写了一个使用JavaNIOAPI执行非阻塞IO的服务器。我看到这样一种情况:有时客户端应用程序突然关闭(例如,由于断电),服务器端的连接保持打开状态 一位同事也遇到了同样的问题,他说他用心跳来检测这种东西,但我希望有一种更简单的方法。还有其他人遇到过这个问题吗Java NIO-检测闭合连接,java,tcp,nio,Java,Tcp,Nio,我已经编写了一个使用JavaNIOAPI执行非阻塞IO的服务器。我看到这样一种情况:有时客户端应用程序突然关闭(例如,由于断电),服务器端的连接保持打开状态 一位同事也遇到了同样的问题,他说他用心跳来检测这种东西,但我希望有一种更简单的方法。还有其他人遇到过这个问题吗 一些附加信息:如果在尝试读/写操作时捕捉到IOException,我当前的服务器设计将取消一个键并关闭相应的通道。这种方法似乎在99%的情况下有效;我只见过少数情况下连接似乎处于打开状态。如果没有应用程序级心跳,您唯一的选择就是依
一些附加信息:如果在尝试读/写操作时捕捉到
IOException
,我当前的服务器设计将取消一个键并关闭相应的通道。这种方法似乎在99%的情况下有效;我只见过少数情况下连接似乎处于打开状态。如果没有应用程序级心跳,您唯一的选择就是依赖TCP keepalive。但是默认的时间间隔很长(比如2小时)。RFC不建议间隔小于2小时
您可以将其缩短,但这是一个系统范围的参数。在某些操作系统上,甚至需要重建内核来改变这一点
因此,强烈建议对任何基于TCP的协议使用心跳。谢谢ZZ编码器-这就是我的想法(担心)。我很惊讶这不是TCP的一个特性。