0

在多人在线游戏中。如何保持变量全局?我们正在开发一个在线游戏,我们需要一个全局变量。将有一个服务器和多个客户端。我们如何保持一个公共变量是静态的,并且所有客户端都可以同步编辑。我们有什么建议吗?

4

3 回答 3

4

如果您移动到集群,拥有基于堆的变量将成为一个问题,因为它不够全局(每个节点将有一个单独的副本)。

如果这不是问题,并且如果“变量”是指简单的东西,如字符串或长整型,那么最好的选择是使用java.util.concurrent.Atomic*类。例如,

public static final AtomicLong id = new AtomicLong();

这样做最重要的优点是它可以使用 compare-and-swap 和 get-and-set 进行原子更新,例如id.getAndIncrement();

于 2012-11-12T12:40:32.190 回答
0

服务器必须控制变量。

当客户端想要修改那个变量时,他们不会改变它,他们必须向服务器发送一条消息,告诉服务器新的想要的值。服务器存储它并向所有客户端广播消息,然后它们都使用新值更新该变量。

当然,如果服务器自己修改,它只是广播新的值。

于 2012-11-12T12:41:30.747 回答
0

- public static final用于在 Java 中创建一个全局变量。

-但 thenvolatile必须用于此,以便操作直接发生在内存中并直接从内存中读取。

-最好使用 java.util.concurrent.Atomic.

-您可以使用AtomicInteger,AtomicLongAtomicReference....

于 2012-11-12T13:16:18.793 回答