从多个客户端更新服务器上对象的模式/最佳实践



我有一个关于解决问题的最佳实践或模式的一般问题。

考虑您在SELPERATE JVMS上运行三个程序:服务器,Client1和Client2。

所有三个过程都会更改对象。当两个客户端更改对象时,必须将对象的更改(而非新对象)发送到服务器。不可能仅将新对象从客户端发送到服务器,因为两个客户端都可能同时更新对象,因此我们需要三角洲,而不是结果。

此时,我不担心将服务器上的更改回到客户端,但让我们考虑一个奖励问题。

使用X个流程数量和Y数量可能会更改的过程和y数量的对象类实施的最佳实践是什么?

我能想到的最好的方法是始终使用命令模式同时更改客户端和服务器上的对象,但是必须有更好的方法?

解决Java中的远程方法调用系统的可能方法之一。将所有数据值保留在服务器上,然后让客户端使用远程调用来查询它们。

但是,这将需要一些智能缓存才能减少毫无意义的呼叫数量。最后,您最终会得到类似于命令模式的东西。

现代游戏试图用我称之为执行的验证模式来解决此问题,每个客户都有游戏世界的本地副本,这使他能够对每个动作得出相同的结论服务器会。因此,假设玩家的操作将其应用于游戏世界的本地副本,假设他们是正确的,则将其发送到服务器,这是接受或以后撤销的最终实例。

这种本地缓存变体的好处是,大多数玩家并没有经历太多的滞后,但是在矛盾的行动的情况下,他们可能会遇到众所周知的后卫。

最后,这在很大程度上取决于您要做的事情以及对您更重要的事情:控制动作或客户端动作流。

最新更新