我看到的有关套接字通信的许多教程似乎每个套接字使用1个线程。但在用于在线游戏的服务器上,您可能有10k个并发用户--10k线程可能不是一个好主意。 我遇到了一个工具(SmartFox),声称使用单线程监视所有套接字连接,可能有数千个套接字连接。这个应用恰好在Java中,但我认为C++或C#可以做同样的事情......你会如何实现这一目标?使用单线程维护多个套接字连接
回答
实现一个排队系统与一个线程轮询网络和x线程作为工人。您需要围绕代码排队和排队连接的代码执行关键部分。
啊,是的那个旧模式。一个明显的解决方案,我应该看到,考虑到我过去曾经使用它。 –
查看java.nio.channels.Selector以便在轮询套接字的线程中使用。 –
如果你使用C++,看看boost :: asio。
当然,制作你自己也很有趣。
The C10K problem谈论这个问题。
既然你提到C++ ...
如果你是一个Windows平台上,那么你应该看看I/O完成端口的这种可扩展性。 I/O完成端口允许您使用少量线程在套接字(和其他设备)上执行异步I/O,以服务数千个I/O操作(即连接)。
这样做的方式是,I/O完成端口本质上是一个队列,但操作系统优化了如何释放线程以处理该队列中的工作项目,以防止一次释放太多的线程并且确保刚刚使用的线程更有可能再次使用。请参阅:http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx获取有关IOCP的MSDN信息,以及:http://www.serverframework.com/products---the-free-framework.html作为我的免费客户端/服务器框架的源代码,该框架使用IOCP的封面。
作为可扩展性的一个例子,在本博客文章(http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html)中,我详细介绍了如何使用760MB ram在Windows Server 2003计算机上实现超过70,000个并发连接。
请注意,C#异步套接字操作在底层使用IOCP。
- 1. Socket.io - 维护套接字连接(Swift)
- 2. Java:多个套接字在一个线程中发送和接收维护
- 3. 多线程套接字连接C#?
- 4. Android多线程程序中的多个套接字连接
- 5. 维护多个套接字连接,同时通过Python中的单个处理程序接收recv
- 6. 多个套接字连接
- 7. 多个实时线程导致udp套接字连接瓶颈
- 8. 在RabbitMQ中维护多少个连接?
- 9. 在Struts2中维护多个JDBC连接
- 10. 黑莓套接字连接和线程
- 11. Haskell - 线程缓慢套接字连接
- 12. 如何在后台维护VOIP套接字连接?
- 13. 维护套接字连接,不规则的数据频率
- 14. python套接字多线程
- 15. 多线程套接字
- 16. Java多线程,套接字
- 17. 套接字和多线程
- 18. PHP套接字 - 接受多个连接
- 19. 维护TCP连接
- 20. 为多个cron作业维护单个数据库连接
- 21. 套接字多连接VB.NET
- 22. 在java中维护一个TCP套接字有多昂贵
- 23. Play2长期套接字连接和多线程
- 24. 处理多个套接字连接
- 25. Python套接字处理多个连接
- 26. 多个java套接字连接
- 27. Java套接字多个连接
- 28. 在一个线程中创建两个套接字连接
- 29. 如何在nodejs中可靠地维护一个连接的套接字数组?
- 30. 如何使用Ruby维护TCP连接?
伟大的联系,我将在稍后详细阅读。你为什么把这个添加为评论,而不是答案? –