代码之家  ›  专栏  ›  技术社区  ›  Adamski

nio-检测闭合连接

  •  7
  • Adamski  · 技术社区  · 15 年前

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

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

    一些附加信息:如果当前的服务器设计捕获到 IOException 尝试读/写操作时。这种方法在99%的情况下似乎都是有效的;我只看到少数情况下,连接似乎是打开的。

    1 回复  |  直到 15 年前
        1
  •  6
  •   ZZ Coder    15 年前

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

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

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