1

我正在开发一个多人 2D 游戏,玩家和其他对象在屏幕上以简单的坐标系移动。所以玩家的客户端将它的动作发送到服务器,根据这些动作,服务器的游戏室线程会定期(可能是 50-100 毫秒)为每个对象计算新的速度、坐标和角度。然后它将有关这些更改的数据发送给每个玩家。

例如,我们有十个玩家可以在一秒钟内发送三次他们的动作,服务器必须将这些动作转发给每个人。考虑到除了移动之外的其他玩家动作,一秒钟内可能会出现数十条小消息,而这只是在一个房间里。

所以这里有一堆问题:

1) Netty 是我正在寻找的框架吗?这是一款实时游戏,所以每一毫秒都很重要。低延迟是最重要的要求。如果玩家的 ping 超过 30,则游戏非常糟糕和滞后。

2)如果是这样,我也想听听你对这种服务器的优化和设置的每一个建议,它发送小数据包,但有很多。我估计并发玩家的峰值将是大约 2000-3000 名用户在 100-200 个房间里玩,所以如果服务器能够无延迟地处理这么多玩家玩游戏,我会非常高兴。

3)每个游戏房间都有某种自己的线程来循环和运行游戏。有没有合适的方法来做这种线程,所以它对服务器的正常功能影响不大?

感谢您的回答!

4

2 回答 2

3

看看这个来自 github的netty 游戏服务器。你可以在这里得到一些好的指针和模式。也许您也可以直接将其用于您的目的

于 2012-04-15T01:14:24.960 回答
1

Netty 可以完成这项工作。它非常适合高吞吐量和低延迟。所以我你应该试一试。我认为它应该为您“开箱即用”;)

Netty 带有 NIO(非阻塞)和 OIO(阻塞)实现。如果您要使用 NIO(我推荐),那么我建议您尝试将您的 api 设计为基于事件并使用尽可能少的线程。否则,如果您有数千个“游戏室”,则可能难以扩展。

于 2012-04-13T19:12:04.813 回答