2013-05-11 67 views
0

我创建了一个可供2个玩家玩的棋盘游戏,其他人可以是旁观者(观看者) 因此,当旁观者加入时,他获得当前的游戏状态,并从然后,他只会得到每个玩家所做的动作(显然可以保存数据)。socket.io跨插槽同步状态

我的问题是:当观众第一次从服务器获得游戏状态时,我如何确保它实际上是同步的?我不知道他会得到的状态,它可能是之前的一小部分东西已经发生了变化,然后他所得到的三角洲所做的每一个举动都没有意义。

我应该使用某种内部?你会建议如何确保一切都同步?

回答

1

假设您的状态是用户操作的结果,并且只能是用户操作的结果,那么您可以使用自动递增整数ID将状态存储为类似格式的表。

在移动事件中,您将传递新ID和以前的ID。如果接收者的最大ID小于先前的ID,则知道向服务器请求丢失的操作。

+0

是的,我想我可以储存所做出的移动次数,并将其进行比较,如果不相同,那么我会传递代表游戏的整个阵列,重新构建它,然后从那里继续三角洲,像往常一样。 – vsync 2013-05-11 15:00:52

+0

如果您使用数组来表示状态,则可能会隐含另外2个整数:currentID和previousID,表示最新条目的索引和前一个条目的索引。这应该允许您仅传递丢失的移动,而不必传递整个数组。很明显,如果你从这个数组中删除项目,这将不起作用。 – marcoseu 2013-05-11 15:05:35