我目前一直在阅读 Java NIO,过去我自己也做了一些实现。但是,我从来没有真正考虑过服务器的性能——这看起来很傻,而且确实如此。我听人说单线程反应器就可以了,但我真的很想利用我拥有的内核。
因为我要实现的是一个游戏,所以也有一些游戏逻辑线程,所以它不能占用很多线程——如果有的话,它可能只有两个。
这是我想出的情节:
- 高优先级反应堆
- 接受连接
- 处理游戏的登录过程(客户端发送数据包,服务器进程,服务器发送响应数据包,这里没有大量数据)
- 按需分发资源文件数据(游戏的构建是为了服务器发送客户端存储在缓存中的数据,该缓存包含游戏的几乎所有资源。大部分都是在加载游戏时完成的,但仍然会发生很多事情在后台播放)
- 标准反应器
- 读取并响应游戏中的数据包;这些通常很小,但数量很多,因为玩家所做的几乎所有事情都以数据包的形式分发,我想很好地扩展它以处理大约 200 名玩家)
目标:
- 适合约 200-300 名玩家
- 快速响应游戏数据包
- 快速分发上述文件数据
- 快速接受连接
此外,如果您熟悉它,游戏就是 RuneScape。我的目标是模拟 RuneScape 的官方服务器软件,因此我的可以与他们的客户之一一起使用。这是一种流行的做法——参见www.runelocus.com、www.rune-server.org,即
我的问题是:你认为这会是一个好的实现吗?仅仅拥有一个反应堆是一个更好的主意吗?还是我应该使用更多?我猜接收和发送的数据大致相同,可能在高优先级反应堆上多一点(这就是为什么它是高优先级的。)
此外,当我将其定义为高优先级时,我实际上并没有将其优先于标准反应器。它只是处理被认为比游戏包更重要的任务。
非常感谢任何反馈:) 如果需要任何澄清/解释,请让我知道!