2

我制作了一个简单的游戏,它使用来自 GameKit 的 GKSession 连接到其他对等方。它很容易设置,但我发现了一些问题:

  • 延迟变化很大。有时消息会立即到达其他设备。有时,向其他对等方发送数据的延迟大于 1 秒。数据只是一个包含 10 个字符的字符串。

  • 我的游戏依赖于精确的时钟同步。游戏有音乐播放,当它没有在所有连接的设备上同时开始播放时听起来很奇怪。

我在文档中找不到有关如何同步计时的任何内容。问题是开始游戏的“主”码头立即开始播放音乐,然后所有其他码头稍后收到消息,因此延迟后开始播放。

然后我尝试在向所有码头发送开始消息后延迟播放游戏音乐,但有时延迟更低或更高,我无法获得良好的可靠同步。

是否有一个开源框架可以让点对点和时钟同步在 iOS 上更可靠、更容易使用?

4

1 回答 1

3

不幸的是,你在这里受到了伤害。通过网络接口进行精确的时钟同步是非常困难的。您需要您的设备在此处同步到 20 毫秒内。

我建议您执行以下操作:以 50 毫秒的间隔发送一堆 ping 数据包,让客户端立即响应。取其平均值,得出平均往返时间 (RTT),然后将其减半以估计单向延迟。然后发送您的“开始时钟”消息并循环旋转,直到您等待单向延迟并开始播放音乐。客户端应在收到“开始时钟”后立即播放其音乐。

这里概述了一个更强大的长期同步解决方案:http ://en.wikipedia.org/wiki/Precision_Time_Protocol

于 2012-12-05T01:54:55.227 回答