在运行程序期间,对于丢失的TCP连接的故障切换,我可以做什么? 我用C++编程分布式程序,使用TCP在Linux的OS 7上运行内核3.1.0

在运行程序期间,对于丢失的TCP连接的故障切换,我可以做什么? 我用C++编程分布式程序,使用TCP在Linux的OS 7上运行内核3.1.0,linux,tcp,Linux,Tcp,该计划是建立在高性能与高CPU,磁盘和网络使用率 该程序可能会运行几天,比如4天。我担心TCP连接在计算过程中由于任何原因丢失的情况,除了一台机器死机的情况 这会发生吗?(当机器都处于活动状态且没有人在套接字上调用close时,tcp连接丢失?) 如果可能的话,像我这样的程序员能为它做些什么? 我是否可以检测到丢失的连接并尝试重新连接 谢谢,理想情况下,连接管理是协议的一部分。通过这种方式,管理被记录下来,客户机和服务器知道预期的结果 一些战略: 使用UDP:无连接。处理请求/回复和可能的故障

该计划是建立在高性能与高CPU,磁盘和网络使用率

该程序可能会运行几天,比如4天。我担心TCP连接在计算过程中由于任何原因丢失的情况,除了一台机器死机的情况

这会发生吗?(当机器都处于活动状态且没有人在套接字上调用close时,tcp连接丢失?)

如果可能的话,像我这样的程序员能为它做些什么? 我是否可以检测到丢失的连接并尝试重新连接


谢谢,

理想情况下,连接管理是协议的一部分。通过这种方式,管理被记录下来,客户机和服务器知道预期的结果

一些战略:

  • 使用UDP:无连接。处理请求/回复和可能的故障。可能需要超时处理回复
  • 短TCP连接:仅在需要时连接,并在“事务”后断开连接(例如http)
  • 具有保持活动状态检查和连接重试的长TCP连接:检查连接故障,让客户端重新连接,服务器等待重新连接

read
write
返回错误时,您会检测到连接丢失。然后关闭连接并尝试重新连接。当然,任何事情都可能发生。由于各种原因,任何套接字连接在任何给定时间都可能遇到网络连接问题。为了澄清这一点,“故障转移”通常指的是,如果当前连接失败,则连接到冗余服务器-这就是您的意思吗?@OliverCharlesworth当然不是!。我将更新我的问题,不仅是您的TCP连接,而且您的进程可能会丢失。如果内存不足,Linux会随机杀死进程。如果系统配置不正确,shell中的一个简单的fork-bomb事件可能会导致这种情况。对于长TCP连接,连接重试的机制是什么?服务器和客户端如何确保它们需要重新连接?它或任何引用是否有一个典型的模式?使用TCP_KEEPALIVE,至少每一方都知道其连接何时丢失。处理来自发送/接收的错误条件似乎是启动重新连接的最佳方式,正如一些程序员已经评论的那样。