我们有一个基于Apache Mina的GPRS网关(服务器)。有时候,通常是在客户端断开连接暴力关闭,例如电源线拔掉或任何其他异常关闭或某些网络问题时,它在服务器端未被移除或关闭。它会一直处于空闲状态,我不知道会持续多久(可能是永远)。
有时我们在关闭服务器时遇到问题,Mina花费的时间过长,有时我们必须最终终止进程。我们怀疑这个问题与死连接问题有关。
实际上,这种死连接是有道理的。由于连接是突然关闭的,mina没有办法检查它(这就是tcp会话的工作原理)。 我们想出了一个解决方案:如果会话保持空闲状态(读和写都空闲)超过30分钟(或任何可配置时间),我们将关闭该会话。但由于以下两个原因,我们不喜欢这个解决方案:
1- 它看起来不好。
2- 此外,我们有一个规则,即客户端与服务器进行持久连接。因此,在设置'空闲超时'时会有一些困难,因为我们不能简单地关闭任何已经空闲x分钟/小时的会话,因为它可能是有效的连接。
那么,在MINA中有更好、更安全(在我们的情况下)的方法来检测和清除这些死连接吗?
实际上,这种死连接是有道理的。由于连接是突然关闭的,mina没有办法检查它(这就是tcp会话的工作原理)。 我们想出了一个解决方案:如果会话保持空闲状态(读和写都空闲)超过30分钟(或任何可配置时间),我们将关闭该会话。但由于以下两个原因,我们不喜欢这个解决方案:
1- 它看起来不好。
2- 此外,我们有一个规则,即客户端与服务器进行持久连接。因此,在设置'空闲超时'时会有一些困难,因为我们不能简单地关闭任何已经空闲x分钟/小时的会话,因为它可能是有效的连接。
那么,在MINA中有更好、更安全(在我们的情况下)的方法来检测和清除这些死连接吗?