我正在编写多人游戏的服务器端网络。该游戏是一款角色扮演游戏,最大容量为 2000 名玩家,但实际上最多可容纳 300 名玩家,尽管可能更高或更低。在最长的时间里,每次我不得不做涉及大量客户端的网络时,我都坚持使用 NIO,因为它不需要使用数百个线程。最近,我遇到了一个 PowerPoint 演示文稿,其中详细描述了这两种模型,它几乎使每客户端线程模型看起来优于 NIO。我还发现一些地方表明旧的 IO 实际上也可以胜过 NIO。
可以在这里找到 PowerPoint(它有点旧): http: //www.mailinator.com/tymaPaulMultithreaded.pdf。
我还没有写任何内容,所以如果我不得不改变我的整个网络设计,从头开始对我来说不是问题。我没有时间压力。最初,我正在使用 NIO 设计一个反应器模式实现(选择一个事件,调度一个处理程序来处理该事件)。
更多信息可以在这里找到:http ://en.wikipedia.org/wiki/Reactor_pattern
我的整个反应器实现设计为使用单个线程。因为我读到旧的 IO 可以跑赢,这实际上让我进退两难。我不想设计一个复杂的 NIO 系统,它使用多个线程来充分利用所有 CPU 能力,但我也对让单个应用程序使用 300 多个线程的想法感到畏缩。哪种设计适合我的目的?每个客户端线程的优势在于它真正利用了本质上的所有 CPU 能力,但与此同时,它使系统陷入困境。更不用说,单个线程的堆栈大小占用了大量内存(当乘以几百倍时)。我应该坚持反应堆模式吗?
I know this question is a bit ambiguous, but I feel that I need to ask a question specifically for my situation because I could not find a question on this site nor a website where it addresses an issue of my sort. There was one about a game, but the game was meant to handle tens of thousands of players.
Thanks a lot! If you need any clarification, please ask!