4

我开始将 GameKit 用于 p2p 项目,我想同时在两个客户端上调用一个函数。假设他们的时钟没有设置为完全相同的时间,我如何调用 NSTimer 或其他任何东西,以便在两个客户端上同时调用我的函数?

谢谢!

4

3 回答 3

3

如果它只是在通过蓝牙连接的两个设备之间,那么您可以将一个作为主时钟,另一个作为从属时钟。首次连接时,主设备会发送自己的当前时间。从站可以使用它来计算自己的时钟和服务器之间的增量。然后它会将任何计时器偏移 delta 并使用该值来设置计时器(主设备使用自己的时钟,客户端使用自己的时钟 +/- diff w/主时钟)。这样,双方就相对同步了。

另一种选择是从服务器(或 NIST,如果您需要绝对时间值)获取时间,然后计算当前 iPhone 时间和服务器时间之间的增量。一旦你有了它,你就不会只依赖本地时间,而是总是用增量来抵消它。

这是相当准确的,但不允许网络传输延迟。如果您需要精确到毫秒,那么您可能需要花点心思并尝试计算某种平均网络延迟以帮助缩小差距。

于 2009-07-01T01:31:25.437 回答
0

确实,更大的问题是:为什么需要这样做?坦率地说,这是一个巨大的痛苦,如果它是“所以双方都看到同样的事情同时发生”,那么让一方成为“服务器”并告诉另一方发起行动可能要容易几个数量级,这会因网络延迟(可能是几毫秒)而有所不同。

于 2009-07-06T16:54:21.613 回答
0

最好的方法是让服务器查询两个客户端以获取他们的时钟时间,然后计算时差,最后向每个客户端发送自定义时间。

于 2009-07-05T22:49:17.133 回答