gpt4 book ai didi

c++ - 在 C++ winsock 中处理多个客户端的方法

转载 作者:太空狗 更新时间:2023-10-29 21:43:47 26 4
gpt4 key购买 nike

我正在开发一个点对点消息解析应用程序。因此,一个对等点可能需要处理多个客户端。并且还有可能发送和接收大数据(一条消息约 20 MB 数据)。可能会出现许多对等点向同一个对等点发送大量数据的情况。我听说有很多解决方案可以处理这种情况。

  • 每个节点使用线程
  • 使用循环遍历节点,如果有数据我们可以接受
  • 使用选择函数
  • 等等

处理此类情况最合适的方法或最普遍和可接受的方法是什么?欢迎任何建议或提示。

更新:windows平台上有没有好的点对点分布式C++计算库或框架

最佳答案

不要对每个节点使用一个线程;超过处理器的数量,额外的线程可能只会损害性能。您还应该调整 dwStackSize这样 1000 个空闲对等点不会花费您 1000MB 的 RAM。

您可以使用线程池(X 线程处理 Y 套接字)来获得性能提升(或者,理想情况下,IO 完成端口),但这对于某些类型的应用程序来说往往工作得非常好,并且根本不适用于其他类型的应用程序。除非你确定你的适合这个,否则我不会证明冒险是合理的。

使用单个线程并从大量套接字进行轮询/发送是完全允许的。我不知道确切的时间large会有相当大的开销,但我(保守地)将它放在 2k-5k 套接字之间的某个地方(在低于平均水平的硬件上)。


WSAEWOULDBLOCK 的解决方法是有一个 std::queue<BYTE>应用程序中每个套接字的字节数(不是“数据包对象”的队列)(您用要发送的数据填充此 queue),并且有一个后台线程,其唯一目的是将队列排入相应的 socket send (一次 X 个字节);你现在可以为此使用阻塞套接字(因为它是后台 worker ),但如果你使用非阻塞套接字并获得 WSAEWOULDBLOCK您可以继续尝试排空队列(在这里它不会阻碍您的应用程序的流动)。

关于c++ - 在 C++ winsock 中处理多个客户端的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21899769/

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