【发布时间】:2012-01-26 21:57:10
【问题描述】:
我正在为一个在线游戏编写服务器,它最终应该能够处理 1,000-2,000 个客户端。我发现的 3 种方法基本上是:
- 1 个线程/连接(阻塞)
- 制作客户端列表并循环访问它们(非阻塞)
- Select(基本上是一次针对所有客户端的阻塞语句,可选超时?)
过去我使用过 1,但众所周知,它不能很好地扩展。 2 还可以,但我有复杂的感觉,一个客户在技术上能够让其他人冻结。 3 听起来很有趣(比 2 好一点),但我听说它不适合太多的连接。 那么,最好的方法是什么(在 D 中)?还有其他选择吗?
【问题讨论】:
-
你能做 2 并将消息传递到工作线程池吗?
-
我想我可以。但我不知道 D 中有内置线程池,而且我从未实现过类似的东西。
-
很有趣,谢谢。一种可能性是,遍历所有客户端,但使用 foreach 并行。不会消除风险,但会加快速度。
标签: sockets network-programming d