2013-08-01 62 views
0

假設我有一個固定時間步驟的實時網絡遊戲。我們還要說,我設法在所有客戶端和服務器之間同步當前步驟。如果輸入數據包提前到達任何主機,他可以簡單地存儲它並等待正確的步驟來執行它。但是,如果數據包稍後到達會發生什麼情況?例如:實時網絡遊戲環境中的遲到數據包

爲步驟5打上時間戳包,它告訴我們玩家A殺死玩家B,從而A成爲贏家。然而,在2步後,爲步驟4的延遲分組時間戳到達,這告訴我們玩家B殺死了玩家A.如果分組遲遲不能到達,那麼玩家A將失去遊戲。我能想到的唯一解決方案是記錄歷史並及時來回地施加更正,但在某些情況下,這可能看起來非常尷尬。

這是什麼典型的方式?我應該如何處理遲到的數據包?在服務器端很容易 - 我可以忽略它們的原始時間戳並且是權威的(事實上,我必須這樣做才能防止作弊),但是在客戶端會導致不同客戶端之間的desyncs。

回答

0

您應該使用流套接字來獲取關鍵信息,比如誰殺了誰。流套接字使用TCP進行數據傳輸,並且數據包始終以相同順序到達,例如,如果發送'A,B,C',它們將以相同順序到達,即'A,B'C'

有關運動的信息不重要的是你可以使用數據報套接字,它們使用UDP進行數據傳輸。在這裏,您可以簡單地忽略舊的消息,因爲您已經處理了新的動作。