gpt4 book ai didi

c - 当套接字中的连接断开时会发生什么 (C)

转载 作者:行者123 更新时间:2023-12-05 01:30:57 25 4
gpt4 key购买 nike

好吧,这似乎是一个相当直截了当的问题,但我觉得我已经阅读了所有我能找到的关于套接字编程的文章,但没有找到满意的答案。首先让我描述一下我正在编程的系统。抱歉,出于 NDA 的目的,我必须非常含糊,但这足以让我的问题得到理解。

我正在编写一个带有线程池的中央多线程 C 服务器。有两种类型的客户端,A 型和 B 型。每种都有数千个。 A 类是为 B 类做事的 worker 。A 类不断向服务器更新有关自身的信息(例如,每 15 秒)。类型 B 仅在需要完成某事时与服务器通信,此时服务器挑选出一个 A 客户端并将工作分配给它。这大约持续 24/7,并且对时间非常敏感。

我决定采用持久性 TCP 模型——这意味着只要 B 请求完成工作,服务器就可以立即将信息发送给 A,而无需等待相关的 A 连接到服务器。此外,如果每个 A 每 15 秒与服务器通信一次,持续建立连接的开销会很大。

如果服务器选择的A不可用,需要尽快选择一个新的A,因为B很不耐烦。

我的问题是,如何判断连接是否断开?我不是在谈论一个套接字被关闭,而是不再连接。例如,B1 想要完成工作,服务器选择 A1 并向其发送请求。然而,有人决定剪断以太网电缆。我不能让服务器愉快地向 A1 发送数据,直到几分钟后连接超时。我可以在尝试向客户端发送消息或其他内容之前先对客户端执行 ping 操作吗?这会引入太多延迟吗?可以做什么?

最佳答案

在我看来,唯一可靠的方法是使用计时器。如果回复时间太长,则假设它已断开连接。将其放入待修复的服务器池中,并每隔一段时间检查一次以查看连接是否已恢复。

这基本上就是金融服务行业处理市场数据馈送的方式。如果你没有足够快地得到回复,你就不能再信任发件人,应该忽略它,直到情况有所改善。对于某些应用程序,他们甚至通过两条独立的网络路径(使用隧道、MPLS-TE、两个多播树)发送每个数据包的两个相同副本,以便他们在需要时始终有可用的备份数据包。

在您的情况下,您可能只需选择另一个工作人员并将任务发送给他们。

关于c - 当套接字中的连接断开时会发生什么 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com