Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在使用GKSession进行对等时,如何获得精确的时钟同步?_Ios_P2p_Gamekit_Bonjour_Gksession - Fatal编程技术网

Ios 在使用GKSession进行对等时,如何获得精确的时钟同步?

Ios 在使用GKSession进行对等时,如何获得精确的时钟同步?,ios,p2p,gamekit,bonjour,gksession,Ios,P2p,Gamekit,Bonjour,Gksession,我制作了一个简单的游戏,使用GameKit中的GKSession连接到其他同行。设置起来很容易,但我发现了一些问题: 延迟变化很大。有时信息会立即到达其他设备。有时,向其他对等方发送数据的延迟大于1秒。数据只是一个包含10个字符的字符串 我的游戏依赖于精确的时钟同步。这款游戏有音乐播放功能,当它没有在所有连接的设备上同时开始播放时,听起来很奇怪 我在文档中找不到任何关于如何调整时间的信息。问题是,启动游戏的“主”码头立即开始播放音乐,然后所有其他码头稍晚收到消息,因此延迟后开始播放 然后我尝

我制作了一个简单的游戏,使用GameKit中的GKSession连接到其他同行。设置起来很容易,但我发现了一些问题:

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

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

我在文档中找不到任何关于如何调整时间的信息。问题是,启动游戏的“主”码头立即开始播放音乐,然后所有其他码头稍晚收到消息,因此延迟后开始播放

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


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

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

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


这里介绍了一个更强大的长期同步解决方案:

以防将来有人看到这一点:Ableton为这个称为“链接”的库创建了一个很棒的(LGPLv2)库。如果我今天要推荐一个图书馆,我会推荐的。在iOS上,最精确的时钟同步方式是GPS。那不是你想要的。