使用 Multipeer Connectivity 在两台设备之间同步计时器?

Posted

技术标签:

【中文标题】使用 Multipeer Connectivity 在两台设备之间同步计时器?【英文标题】:Sync timers between two devices using Multipeer Connectivity? 【发布时间】:2017-07-10 20:49:10 【问题描述】:

我遇到过一些可以解决我的问题的帖子,但实际上没有一个帖子能提供我正在寻找的答案。我正在使用 Multipeer Connectivity 在两台设备之间进行连接,并且我想同时执行一段代码,并且延迟尽可能短。我已经通过从主机向另一个对等方发送时间戳来同时启动计时器(使用 Date 类),但总是至少有 0.3 到 0.5 秒的延迟。问题是设备时间没有完美同步。是否有任何第三方框架或解决方案可以让我在两个设备上同时运行代码?这方面的一个例子是应用程序 AmpMe,它可以在许多设备上同步音乐。顺便说一句,我正在使用 Swift 3。

【问题讨论】:

您好@themaanas,您有什么方法可以在 AmpMe App 等设备附近同时播放音乐?我已经检查了 Apple 提供的 MultipeerConnectivity Framework。 【参考方案1】:

我建议使用时间服务器来同步他们的时钟或计算他们的时钟之间的偏移量,然后使用这些偏移量在两个设备上的完全相同的时刻启动您的计时器。

【讨论】:

我将如何计算偏移量?请记住,我需要在多个设备上这样做,而不仅仅是两个。 找一个时间服务器。从该时间服务器获取时间。与当前系统时间比较。计算当前设备的差异。假设有良好的延迟,除了最关键的同步之外,这应该足够准确。 这仍然不允许我在设备之间同步时间。它只会让我知道一个设备的时间与实际时间相差多少,而不是一个设备的时间与另一台设备的相差多少。 一旦您知道每个设备的时钟与实时有多少差异,您就可以根据实际时间触发事件(使用偏移量进行调整)。因此您可以同步设备。 对于每个设备,使用时间服务器计算其与实时的偏移量。然后,使用实时单位广播“在未来时间 ABC 执行 ”消息。在每台设备上,使用先前计算的偏移量将实时时间调整为设备时间,并启动一个计时器,该计时器将在所需时间触发所需事件。

以上是关于使用 Multipeer Connectivity 在两台设备之间同步计时器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用swift 4查看Multipeer Connectivity框架中的MCBrowserViewController

swift Multipeer Connectivity,使用邀请处理程序取消邀请

Multipeer Connectivity 自动静默连接

如何使用 Multipeer Connectivity 框架邀请用户加入我的会话?

使用 Multipeer Connectivity wifi/蓝牙发送 UISlider 值

如何检测 Multipeer Connectivity 邀请的拒绝?