c++ - 为 C++ 中的应用程序最佳使用而打开的并行套接字/TCP 连接数

标签 c++ c sockets networking tcp

因此,我正在开发一个 C++ 应用程序,该应用程序当前使用 C 套接字在对等点之间传输数据。有 n 个对等点,并且都运行相同的代码。在应用程序逻辑中,任何对等点都可能需要将(可能很大的)数据传输到任何其他对等点,因此首先在所有可能的对等点组合之间打开连接。要求是应用程序逻辑和(可能是大的)数据的网络传输应该尽可能快。

截至目前,在任意 2 个对等点(比如 A 和 B)之间,应用程序打开 2 种类型的连接 - 一种是 A 是服务器,B 是客户端,反之亦然。这样做可能是为了如果 A 需要同时向 B 传输数据,反之亦然,则整个过程可以比仅从 A 到 B 具有一种连接类型更快地完成。对于每种连接类型(比如 A 是服务器,B 是服务器)客户端),然后应用程序打开 3 个 TCP 连接(使用 C 套接字)。然而,它目前的编码方式最终只使用这 3 个连接之一。

看到这里,我开始想,要充分利用 N 个打开的连接,也许可以使用循环法或某种策略将数据分成 block 并同时传输。但是,应该打开多少个并行 TCP 连接以及在这些连接之间使用什么策略的问题对我来说并不清楚。这个答案还取决于哪些因素?例如,如果我打开了 1000 个 TCP 连接,有什么危害? (忽略系统限制,如端口用完等)

如果有人能阐明当今的应用程序如何利用多个并行 TCP 连接来实现最佳性能,那就太好了。快速谷歌搜索引导我找到几篇研究论文,但我也有兴趣了解例如网络浏览器如何解决这个问题。

谢谢!


更新:在与一些对 TCP 有更多了解的人交谈后,我有了一个更好的画面。 首先,我认为在 A 和 B 之间打开两种类型的连接(A 是客户端,B 是服务器,反之亦然)将有助于增加净吞吐量的前提似乎是错误的。在 A 和 B 之间打开一种类型的 TCP 连接就足够了。这取决于数据报是否能够同时从 A 传输到 B,反之亦然。我发现此链接很有用:Is TCP bidirectional or full-duplex? .

此外,为了充分利用我可用的带宽,最好打开多个 TCP 连接。我发现了这个高度相关的链接:TCP is it possible to achieve higher transfer rate with multiple connections?

但是应该打开多少这样的连接的问题仍然存在。如果有人能回答这个问题就太好了。

最佳答案

您没有指定操作系统,所以我假设我们正在谈论的是 Linux。 我认为你需要对非阻塞 IO 做一些研究,比如 epoll 或 asio。它是目前同时处理多个连接的最有效和可扩展的方式。

你可以开始here ,例如。

可以找到一些性能分析herehere .

关于c++ - 为 C++ 中的应用程序最佳使用而打开的并行套接字/TCP 连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54041542/

相关文章:

c++ - 将字符串 "1+1"转换为总和

java - 在字节之间的套接字之间发送字符串

linux - TCP 消息框架 + recv() [linux] : Good conventions?

php - ReCaptcha - 无法打开套接字

c++ - 打开 Pegasus 2.14.1 客户端连接问题

c++ - 为什么这个循环只运行一次?

c++ - 没有用于调用 vector 的匹配函数

c - 为什么这些类型定义得到相同的结果

c - asctime() 奇怪的行为

c - 如何将结构用作指针和函数中的结构