服务器更新过程设计模式



我一直在stackoverflow周围搜索类似的问题,比如MMORPG服务器设计模式等等,因为概念基本上是一样的,然而,我来了没有令人满意的结论来解决我的问题。

功能
从本质上讲,服务器软件(使用JBoss Netty在Java中开发)允许经过身份验证的设备客户端传输和控制实体数据,然后将实体数据传输到指定范围的设备客户端。

考虑的方法
1.使用固定的线程池,并定期更新队列设备,其中服务器对设备范围内的实体执行检查,并发送适当的生成/更新/销毁数据包
2.使用反应器风格的模型,将事件发布到反应器并进行处理
同步地。例如,可以在设备更新时发布事件实体或设备更新其位置。然后,服务器可以在中选择实体设备的范围,并传输适当的创建/更新/销毁数据包
异步
3.在Netty事件线程上执行更新。例如,客户端更新它的
位置,服务器对范围内的实体执行检查,并发送适当的创建/更新/销毁数据包。问题是,使用这种方法,服务器将
除非设备更新其位置,否则不传输实体。解决问题的方法问题还可能是在实体创建/更新/销毁时选择范围内的设备消息,并同步更新每个消息。

这些只是我考虑过的几种方法,我正在寻找最具可扩展性的方法提供尽可能少的延迟,因为数据需要尽可能实时。欢迎任何其他建议的方法。

如果我的问题缺乏足够的信息,我很抱歉,我很乐意纠正任何错误或者根据请求提供附加信息。

感谢您的回复。

这是我编写的一个多人网络游戏服务器。你可以在那里找到一些你的问题的答案。我还没有决定可伸缩性部分。我正在考虑多种选择。

  1. 不要在多个vm之间共享状态。这意味着玩家将获得最低的延迟。不利的一面是,如果他们的同龄人在那里玩,他们将无法从一个vm跳到另一个vm。在这个模型中,传入事件将被存储/记录,在发生崩溃等情况时,为了持久性,它们将被重播。下面的编年史会有所帮助
  2. vm之间共享状态。延迟可能会受到影响,但可扩展性肯定会更高。我在看榛子糖。这使得透明的状态共享得以实现

最新更新