2013-05-11 37 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