Java 服务器更新过程设计模式

Java 服务器更新过程设计模式,java,networking,netty,Java,Networking,Netty,我一直在stackoverflow搜索类似的问题,比如MMORPG服务器 设计模式等等,因为概念基本上是一样的,但是,我来了 没有令人满意的结论来解决我的问题 功能性 本质上,服务器软件(使用JBoss Netty在Java中开发)非常简单 允许经过身份验证的设备客户端传输和控制实体数据,然后将实体数据传输到指定范围内的设备客户端 经过深思熟虑的方法 1.使用固定线程池,并定期更新队列设备,其中服务器 对设备范围内的实体执行检查,并发送相应的 生成/更新/销毁数据包。 2.使用目录式模型,将事件

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

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

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

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

如果我的问题缺乏足够的信息,我很抱歉,我很乐意纠正任何错误 或按要求提供其他信息

感谢您的回复。

这是我写的一封信。你可以在那里找到你的问题的一些答案。在可伸缩性方面,我还没有决定。我在这里看到了多种选择

  • 不要在多个vm之间共享状态。这意味着玩家将获得最低的延迟。缺点是,如果他们的同龄人在虚拟机上玩,他们将无法从一个虚拟机跳到另一个虚拟机。在该模型中,传入事件将被存储/记录,并且在发生崩溃等情况下,出于耐久性考虑,它们将被重放。下面的内容会有所帮助
  • 在vm之间共享状态。延迟可能会受到影响,但可伸缩性肯定会更高。我正在看。这样就可以实现透明的状态共享

  • 实际上,我在研究源代码时下载了一份源代码副本,通过查看示例游戏服务器,我发现您正在Netty I/O线程(即messageReceived)上执行更新。是否正确?否。如果查看handlers.netty包中的DefaultToServerHandler类,您将看到playerSession.OneEvent(事件)。这个调用实际上是异步的,因为会话EventDispatcher(您可以在event.impl包中看到两个事件Dispatcher)将把它分派到不同的线程。还可以在src/test中签出时差ventdispatchertest类。PlayerSession*测试还将显示异步事件调度是如何完成的。感谢您的解释:)在查看之后,我现在明白了。我认为我将在单个线程池上一次处理一个I/O事件(如spawn/update/destroy),然后是客户端传输逻辑(将在固定或缓存的线程池上并行执行)。另外,谢谢你的回复。