在C++winsock中处理多个客户端的方法
Methodologies to handling multiple clients in C++ winsock
我正在开发一个对等消息解析应用程序。因此,一个对等体可能需要处理多个客户端。此外,还可以发送和接收大数据(一条消息约20 MB的数据)。可能存在许多对等体向同一对等体发送大数据的情况。我听说有很多解决办法来处理这种情况。
- 使用每个对等线程
- 使用循环遍历对等体,如果有数据,我们可以接收器
- 使用
select
函数 - 等等
处理这种情况最合适的方法或最常见和最被接受的方法是什么?欢迎任何建议或暗示。
更新:是否有一个良好的对等分布式计算库或框架用于windows平台上的C++
不要使用每个对等线程;超过处理器数量,额外的线程可能只会损害性能。你还应该调整dwStackSize
,这样1000个空闲的对等设备就不会花费你1000MB的RAM。
您可以使用线程池(处理Y
套接字的X
线程)来提高性能(或者,理想情况下,使用IO完成端口),但这往往适用于某些类型的应用程序,而不适用于其他类型的应用。除非你确定你的适合这个,否则我不会证明冒险是合理的。
完全允许使用单个线程并从大量套接字轮询/发送。我不知道large
什么时候会有可担心的开销,但我(保守地)估计它在2k-5k个插座之间(在低于平均水平的硬件上)。
WSAEWOULDBLOCK
的解决方法是为应用程序中的每个套接字设置一个std::queue<BYTE>
字节(而不是"数据包对象"队列)(用要发送的数据填充此queue
),并具有一个后台线程,其唯一目的是将队列排入相应的套接字send
(一次X
字节);现在可以使用阻塞套接字(因为它是后台工作程序),但如果使用非阻塞套接字并获得WSAEWOULDBLOCK
,则可以继续尝试排出队列(在这里它不会阻碍应用程序的流动)。
您可以使用libtorrent.org,它是在boost(boost asio)之上构建的。它专注于效率和可扩展性。
我在用C++开发套接字方面没有太多经验,但在C#中,我有很好的异步接受连接并将它们从线程池传递到自己的线程的经验。
相关文章:
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- 使用 c++ 的 http 客户端的默认方法
- 服务器进程等待客户端输入/消息的最佳方法是什么?
- libmosquittopp-示例客户端挂在loop_stop()方法上
- 在C++winsock中处理多个客户端的方法
- 在客户端和远程服务器中比较文件列表的有效方法是什么?
- 在客户端的函数声明头文件中使用类头文件时C++消除包含类头文件的方法
- CORBA客户端是否有访问服务器IOR文件的方法
- 处理客户端连接的最有效方法(套接字编程)
- 在Windows下处理多个客户端连接的最佳方法(不使用线程)
- 如何在 C 或 C++ 中仅使用 GET 和 POST 方法编写 http 协议客户端
- 有没有可靠的方法可以在没有电子邮件客户端的情况下实现电子邮件功能
- 管理客户端在 C 套接字中突然断开连接的好方法
- 向我的 TCP 客户端/服务器应用添加加密层的最直接方法是什么?
- 客户端 API 的make_unique、工厂方法或不同设计
- 安全的服务器-客户端握手方法
- 如何实现一个好的客户端-服务器方法
- Windows消息传递-获取非客户端区域的设备上下文的各种方法
- 如何在客户端实现在DLL中声明的方法
- 当客户端连接越来越少的时候(在linux上使用套接字编程),服务器监听的明智方法是什么?