我正在爲我製作的遊戲添加聯網多人遊戲。當服務器向客戶端發送更新數據包時,我會包含一個時間戳記,以便客戶端確切知道該信息何時有效。但是,服務器計算機和客戶端計算機可能會將其時鐘設置爲不同的時間(甚至可能差幾秒),所以服務器的時間戳需要轉換爲客戶端的本地時間。測量聯網設備之間的時間差異
所以,我想知道計算服務器和客戶端之間時差的最佳方法。目前,客戶端在初始化過程中向服務器發送一個時間戳記,記錄了請求的發送時間和應答時間,並且猜測時間戳記大概是在旅途中途產生的。客戶也運行這些試驗中的10個,並取平均值。
但問題是,我得到不同的結果重複運行的程序。在每組10個測量中,每個測量很少會發生400多毫秒的偏差,這可能是可以接受的。但是如果我在程序的每次運行之間等待幾分鐘,結果平均值可能會有2秒鐘的不同意見,這是不可接受的。
有沒有更好的方法來找出兩個聯網設備的時鐘之間的差異?還是至少有一種方法來調整我的算法,以產生更準確的結果?
可能相關或不相關的細節:設備是通過藍牙進行通信的iPod Touch。我測量的平均值是50-200毫秒。我不能要求用戶同步他們的時鐘。 :)
更新:在下面的答案幫助下,我寫了一個Objective-C類來處理這個問題。我發佈在我的博客上:http://scooops.blogspot.com/2010/09/timesync-was-time-sink.html
哇!謝謝!這正是我要找的。對我來說這並不完全清楚,但爲什麼這比我最初的方法更好(雖然我相信它),但是當我嘗試時我會回到這裏。我認爲我不需要在整個遊戲過程中進行調整,但如果需要的話,應該不難做到。再次感謝! – whooops 2010-09-21 00:19:56
這工作得很好。我發現,如果我總是採用最小(即最負)的t1和t2值,這與採用最小的ping相同,所以它會收斂到正確的偏移量。 我已經 T1 =客戶郵票 - 服務器郵票 和 T2 =服務器郵票 - 客戶端郵票 另外,我發現,iPhone手機相當顯著漂移!在半小時內,兩臺設備之間的實際偏移可能會改變半秒鐘。我使用與NTP服務器聯繫的時鐘程序對此進行了驗證。 – whooops 2010-09-21 20:28:49
很高興它對你有幫助。 – 2010-09-21 20:35:48