首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apache mina中的死会话

apache mina中的死会话
EN

Stack Overflow用户
提问于 2011-09-22 14:24:04
回答 1查看 3.3K关注 0票数 3

我们有一个基于apache mina的GPRS网关(服务器)。有时,通常当连接从客户端粗暴地终止时,即拔下电源线或任何其他异常关机或网络问题,它不会在服务器端移除或关闭。它仍然在那里,处于空闲状态,因为我不知道有多长时间(可能是永远)。有时我们在关闭服务器时会遇到问题,MINA花费了太多时间,有时我们不得不最终杀死它。我们怀疑这个问题与死连接问题有关。

实际上,这种死连接是有意义的。因为连接被粗暴地关闭,而mina没有办法检查它(这就是tcp会话的工作方式)。作为解决办法,我们设计了一个解决方案,如果会话保持空闲(读和写) 30分钟(或任何可配置的时间),我们将关闭它。我们不喜欢它有两个原因:

1-它看起来不太好。

2-此外,我们有一个规则,即客户端与服务器建立持久连接。因此,设置“空闲超时”有点困难,因为我们不能简单地关闭任何空闲了x分钟/小时的会话,因为它可以是一个有效的连接。

那么,有没有更好、更安全的方法(在我们的例子中)来检测和清除MINA中的这些死连接呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-22 15:21:23

在这两种情况下,长时间不活动的连接和丢失的连接-通道中没有活动应该导致在OSI model的每一层中配置时间后超时。例如,您的防火墙/路由器/服务器可能会在10分钟内使非活动连接条目超时,那么您的应用层连接也应该在10分钟后超时--等待更多时间没有任何意义。

为了防止静默连接超时,应该引入保活协议。它可以是ping (确切地说不是ICMP)或其他形式的周期性无操作通信。当对等设备处于活动状态时,它应该作出响应,并因此刷新所有网络层上的超时倒计时。在超时或层信令连接中断导致的尝试失败后,您可以假定您的应用层连接也已中断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7510416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档