情况:
由于通知之间可能有很长的停顿时间(多天),我遇到了这样的问题:底层TCP连接在一段时间后悄然终止,而我的应用程序停止接收通知。
在谷歌搜索解决方案时,我发现可以在连接上设置一个参数tcpKeepAlive。所以我把它设置为true,并且很高兴。直到第二天,我才再次看到我的联系已不复存在。
由于我一直怀疑,有一个wireshark捕获并行运行,现在证明是非常有用的。就在上一次成功地就感兴趣的连接进行通信大约两小时后,我的应用程序就向数据库服务器发送了一个保活包。但是,服务器使用RST进行响应,因为它似乎已经关闭了连接。
服务器上的net.ipv4.tcp_keepalive_time设置为7200,即2小时。
我需要以某种方式在服务器上启用“保持活动”还是增加keepalive_time?
这就是保持我的应用程序连接的方法吗?
TL;DR:我的数据库连接在长时间不活动后被终止。设置tcpKeepAlive没有修复它,因为服务器使用RST进行响应。该怎么办呢?
发布于 2014-06-10 12:35:36
正如Craig在评论中所建议的,这个问题很可能与服务器和应用程序之间的某个网络硬件有关。修复方法是增加保持活动消息的频率。
在我的例子中,操作系统是Windows,您必须创建一个具有空闲时间(以毫秒为单位)的注册表密钥,然后再发送消息。关于那个这里的信息
我把时间定在15分钟,这似乎解决了这个问题。
更新:看起来只解决了这个问题。经过大约两天的程序运行时间,我的连接又中断了。每次我使用连接时,我都会检查它的有效性。这看起来不像是,也不是解决方案,但它仍然是一个解决方案。
https://stackoverflow.com/questions/24133668
复制相似问题