我制作了一个简单的游戏,使用GameKit的GKSession连接到其他同伴。这很容易设置,但我发现了一些问题:
延迟变化很大。有时消息会立即到达其他设备。有时等待时间> 1秒用于向其他对等方发送数据。数据只是一个包含10个字符的字符串。
我的游戏取决于精确的时钟同步。游戏有音乐播放,当它没有在所有连接设备上同时播放时听起来很奇怪。
我在文档中找不到任何关于如何限制时间的信息。问题是,开始游戏的“主”码头立即开始播放音乐,然后所有其他码头稍后收到消息,因此在延迟后开始播放。
然后我尝试在向所有码头发送开始消息后延迟播放游戏音乐,但有时候延迟会更低或更高,而我无法获得良好可靠的同步。
是否有一个开源框架可以让对等和时钟同步更可靠,更容易在iOS上使用?
答案 0 :(得分:3)
不幸的是,你在这里遇到了一个受伤的世界。通过网络接口进行精确的时钟同步非常困难。您需要在20毫秒内同步设备。
我建议您执行以下操作:以50ms的间隔发送一堆ping数据包,使客户端立即响应。取平均值给出平均往返时间(RTT),然后将其减半以估计单向延迟。然后发送“开始时钟”消息并循环旋转,直到您等待单向延迟并开始播放音乐。客户端应在收到“开始时钟”后立即播放音乐。
此处列出了更强大的长期同步解决方案:http://en.wikipedia.org/wiki/Precision_Time_Protocol