2012-11-18 48 views
2

我做了一個簡單的遊戲,它使用來自GameKit的GKSession連接到其他同伴。這很容易設置,但我發現了一些問題:如何在與GKSession進行點對點時獲得精確的時鐘同步?

  • 延遲變化很大。有時消息立即到達其他設備。有時向其他對等方發送數據的延遲時間大於1秒。數據只是一個包含10個字符的字符串。

  • 我的遊戲取決於精確的時鐘同步。遊戲具有音樂播放功能,當它不在所有連接的設備上同時播放時,聽起來很奇怪。

我找不到關於如何slenchroize時間的文檔中的任何東西。問題在於,開始遊戲的「主」碼頭立即開始播放音樂,然後所有其他碼頭稍後收到該消息,從而在延遲後開始播放。

然後,我試圖在將啓動消息發送到所有碼頭後延遲播放遊戲音樂,但是有時延遲會更低或更高,並且我無法獲得可靠的同步。

有沒有一個開源的框架,使對等和時鐘同步更可靠,更容易在iOS上使用?

+0

在iOS你獲得時鐘同步的最精確的方法是GPS。這不是你想要的。 – Sentinel

回答

3

不幸的是,你在這裏受到了傷害的世界。通過網絡接口進行精確的時鐘同步是非常困難的。你需要你的設備在20ms內同步到這裏。

我建議做以下操作:以50ms的間隔發送一串ping數據包,使客戶端立即響應。取平均往返時間(RTT),然後減半以估計單向延遲。然後發送您的'開始時鐘'消息並循環播放,直到您等待單向延遲並開始播放音樂。客戶應在收到'開始時鐘'後立即播放其音樂。

這裏有列出一個更強大的長期同步解決方案:http://en.wikipedia.org/wiki/Precision_Time_Protocol

+0

如果有人在將來看到這種情況:Ableton已經創建了一個很棒的(LGPLv2)圖書館來稱爲「鏈接」。如果我今天推薦一個圖書館,我會建議。 https://www.ableton.com/zh/link/ –