我正在设计一个模拟器应用程序,其中应用程序启动多个套接字连接(大约1000个连接)到服务器。我不想启动多个线程来处理这些连接,因为系统不能处理那么多的客户端。使用选择没有什么意义,因为我需要循环1000个可能很慢的连接。请建议我如何处理这种情况。多套接字客户端连接到服务器
0
A
回答
3
您想与I/O Completion Port(IOCP)一起使用异步I/O。
这很容易解释,但任何需要支持大量并发套接字的Windows应用程序都应该使用IOCP。
IOCP本质上是一个Windows提供的线程安全工作队列。你将一个'完成数据包'排队到一个IOCP,然后另一个线程将它出队并且使用它。
您还可以将支持重叠操作的多种类型的句柄(如套接字)关联到IOCP。当您将句柄与IOCP关联时,重叠操作(如WSARecv
)会自动将完成数据包发送到关联的IOCP。
所以,基本上,你可以有一个线程处理所有1000个连接。每个套接字将被创建为一个重叠套接字,然后与您的IOCP相关联。然后,您可以在所有1000个套接字上调用WSARecv
,并等待完成数据包可用。当收到数据时,操作系统会将完成数据包发送到关联的IOCP。这将包含相关信息,例如读取了多少数据以及包含数据的缓冲区。
0
循环1000个句柄仍然比发送1000个数据包快得多,所以我不担心这里的性能。 select()
仍然是要走的路。
相关问题
- 1. 连接到客户端的服务器套接字
- 2. Java套接字 - 关闭到服务器套接字的telnet客户端连接
- 3. Python套接字客户端到Java套接字服务器
- 4. PHP套接字服务器/客户端
- 5. Python服务器客户端套接字
- 6. 客户端服务器udp套接字
- 7. Java套接字客户端/服务器
- 8. php套接字服务器检查客户端是否连接
- 9. Android客户端PC服务器java套接字连接失败
- 10. 同时关闭服务器和客户端套接字连接
- 11. AS3客户端 - C#服务器套接字连接失败,
- 12. Java客户端/ Ruby服务器套接字连接
- 13. Java双向套接字连接(服务器/客户端)
- 14. 服务器/客户端套接字连接
- 15. 无法连接Java套接字服务器和客户端
- 16. 从单个客户端套接字连接到多个服务器C
- 17. 套接字服务器未与JavaScript套接字客户端连接
- 18. java套接字服务器和套接字客户端之间的连接
- 19. 连接NodeMCU Lua套接字客户端与node.js套接字服务器
- 20. 让套接字服务器接受多个客户端
- 21. C套接字服务器,Java套接字客户端:阻塞!
- 22. 客户端连接或服务器端?
- 23. 套接字:客户端无法连接到其他电脑/服务器
- 24. C中的UDP套接字:客户端1到服务器到客户端2
- 25. C#套接字编程:服务器不接受客户端连接
- 26. 客户端套接字连接问题
- 27. java套接字客户端单连接
- 28. 连接两个客户端套接字
- 29. 客户端的套接字连接
- 30. PHP - 客户端套接字连接