【发布时间】:2011-09-22 06:24:03
【问题描述】:
我们有一个基于 apache mina 的 GPRS 网关(服务器)。有时,通常当连接从客户端被残酷地终止时,即电源线被拔掉或任何其他异常关闭或网络问题,它不会在服务器端被移除或关闭。它保持在那里,处于空闲状态,因为我不知道多久(可能永远)。
有时我们在关闭服务器时遇到问题,MINA 花费了太多时间,有时我们最终不得不杀死它。我们怀疑这个问题与死连接问题有关。
实际上,这种死连接是有道理的。由于连接被粗暴地关闭并且 mina 没有办法检查它(这就是 tcp session 的工作方式)。
作为一种解决方法,我们设计了一个解决方案,如果会话保持空闲(读取和写入)30 分钟(或任何可配置的时间),我们将关闭会话。我们不喜欢这有两个原因:
1- 看起来不太好。
2- 另外,我们有一条规则,即客户端与服务器建立持久连接。因此,设置“空闲超时”有点困难,因为我们不能关闭任何已空闲 x 分钟/小时的会话,因为它可以是有效的连接。
那么,有没有更好、更安全(在我们的例子中)的方法来检测和清除 MINA 中的这些死连接?
【问题讨论】:
标签: java network-programming apache-mina