当前位置:  开发笔记 > 运维 > 正文

TCP连接寿命

如何解决《TCP连接寿命》经验,为你挑选了4个好方法。

我可以期待客户端/服务器TCP连接在野外持续多久?

我希望它保持永久连接,但事情发生了,所以客户端必须重新连接.在什么时候我说代码中存在问题而不是某些外部设备出现问题?



1> Bart Read..:

我赞同Zan Lynx.无法保证,但假设没有连接或带宽问题,您可以通过在其上发送数据几乎无限期地保持连接活动.

一般来说,我已经采用了应用程序级别的keep-alive方法,虽然这通常是因为它已经在客户端规范中,所以我必须这样做.但是每隔一两分钟就发送一些简短的数据,你期望得到一些确认.

无论您是否因为连接失败而无法确认,都取决于您.通常这是我过去所做的,虽然有一个案例我已经等待连续三次失败的回复放弃连接,因为连接另一端的应用程序响应"你在那里是非常不稳定的?" 要求.

如果连接失败,即使机器在同一网络上,它可能会在某些时候失败,然后尝试重新建立它.如果失败了一定次数则会出现问题.如果您的连接在连接一段时间后再次出现故障,则会出现问题.最有可能在两种情况下,它可能是一些网络问题,而不是您的代码,或者您的计算机上的TCP/IP堆栈可能存在问题(已知:我在旧版本的QNX上遇到此问题 - 它只是随机摔倒).说过你可能遇到了软件问题,唯一可以确定的方法就是附加一个调试器,或者在那里进行一些登录.例如,如果您可以始终成功连接,但在一段时间后您停止获取ACK,即使重新连接后,那么您的服务器可能会死锁,

真正有用的是在各种负载条件下设置一系列长时间运行的测试,从发送保持活动开始你是否存在?/ ack请求和响应,以及绝对殴打服务器.这通常会让您对软件组件更有信心,并且可以非常有用地解决一些非常奇怪的问题,这些问题不一定会导致连接出现问题,尽管它们可能会导致交易出现问题.例如,我曾经写过一个提供数字翻译等服务的电信应用服务器,我们只是让它一次运行几天.事情是,当星期六到来时,整整一天,它会拒绝所有进来的呼叫请求,这相当于数百万次呼叫,我们不知道为什么.

希望有所帮助.



2> benc..:

我认为这里最重要的想法是理论与实践.

最初的理论是连接没有生命周期.如果你有连接,它会永远保持打开状态,即使没有流量,直到一个事件导致它关闭.

新理论认为,大多数操作系统版本都已启用了保持活动计时器.这意味着只要另一端的系统响应偶尔的TCP级交换,连接将永远持续下去.

实际上,许多连接将在一段时间后终止,具有各种标准和情况.

两个非常好的示例是:远程客户端使用DHCP,租约到期,IP地址更改.

另一个例子是防火墙,它似乎越来越智能化,可以识别保持活动流量与实际数据,并根据任何高级标准(特别是空闲时间)关闭连接.

您希望如何实现重新连接逻辑在很大程度上取决于您的体系结构,工作环境和性能目标.



3> GEOCHET..:

它应该不重要,您应该设计您的代码以自动重新连接,如果这是所需的行为.



4> noah..:

真的没有办法说出来.TCP固有的任何东西都不会导致连接在一定时间后丢失.有可靠连接的人可能有多年的正常运行时间,而另一个连接的人可能需要每5分钟重新连接一次.没有办法告诉甚至猜测.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有