首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP持久连接是确定断开链路的唯一机制吗?

TCP持久连接是确定断开链路的唯一机制吗?
EN

Stack Overflow用户
提问于 2008-12-08 04:31:34
回答 5查看 8.9K关注 0票数 4

我最近遇到了TCP服务器和客户端之间的中间链路中断的问题。如果主服务器停机,客户端需要连接到辅助服务器。当主服务器被关闭时(在终端上执行^C的Ex ..by操作),有一个TCP关闭序列可以通过,并且客户端成功地检测到断开的链路并尝试从服务器。但是,如果中间链路中断,客户端和服务器将无法察觉。客户端可以检测到的唯一方法是当失败的“发送”操作填满它的TCP缓冲区时。

作为对此的解决方案,已经使用了“TCP Keepalive”机制。这是令人满意的工作。

我的问题是“TCP Keepalive”是唯一的解决方案吗?

-Prabhu

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-08 06:29:27

Keepalive旨在处理所谓的半开放连接,当其中一方(通常是接收请求的服务器)不知道连接已中断时。客户端通常知道这一点,因为向服务器发送请求的尝试会返回错误。

另一种选择是保持监听程序运行-当客户端检测到通信问题时,它只是尝试再次连接到服务器。服务器获取传入的连接,检查是否来自相同的IP地址,如果是,则关闭已打开的连接并建立新的连接。

但是如果客户端不知道连接中断了,服务器需要发送一些东西,那么服务器除了TCP keepalive之外,没有办法重新建立连接。

如果你不想使用keepalive,你可以使用应用程序级别的keepalive,例如发送应用程序特定的回显消息。

票数 3
EN

Stack Overflow用户

发布于 2008-12-08 06:38:20

我总是在应用程序级别处理这个问题,通过扩展客户端和服务器之间通过TCP进行通信的协议,使用"Keep Alive"-Messages服务器和客户端发送此消息,例如,每秒,如果它们没有在2秒内获得"Keep Alive"-Message,则连接可能关闭。

TCP的Keep-Alive机制很好,但很难使用,尤其是在不同平台上工作时。

票数 3
EN

Stack Overflow用户

发布于 2009-03-03 22:55:23

另一种解决方案是在单独的套接字上使用心跳。这样,如果连接中断,您几乎可以立即知道。当您的主连接正在发送没有消息边界的流数据时,这很有用。

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

https://stackoverflow.com/questions/348658

复制
相关文章

相似问题

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