2009-07-01 71 views
4

我开始为一个p2p项目使用GameKit,并且我想在两个客户端同时调用一个函数。假设他们的时钟没有被设置为完全相同的时间,那么我怎样才能调用NSTimer或者其他什么,这样我的函数在两个客户端同时被调用?如何在多个iPhone上同时调用某个功能?

谢谢!

+3

你不能这样做。通常情况下,您可以将客户端连接到某种服务器,并保持心跳状态并向客户端发送消息,以便同步执行某些操作。如果你不能拥有一台专用服务器,那么与其中一台P2P客户端(通常是“主机”)会执行此功能并告诉其他人何时执行某种方法。 – 2009-07-01 00:41:38

回答

3

如果它只是通过蓝牙连接的两台设备之间,那么您可以分配一个作为主时钟,另一个作为从设备。当第一次连接时,主站发送自己的当前时间。从机可以使用它来计算它自己的时钟和服务器之间的增量。然后它将偏移任何定时器的三角洲并使用该值来设置一个定时器(主机使用自己的时钟,客户端自己的时钟+/-差异w /主时钟)。那样的话,双方都是相互同步的。

另一种方法是从服务器(或NIST,如果您需要绝对时间值)获取时间,然后计算当前iPhone时间和服务器时间之间的增量。一旦你有了,你不会单独依靠本地时间,但总是会抵消三角洲的影响。

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

0

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

0

真的,更大的问题是:为什么你需要这样做?坦率地说,这是一个巨大的痛苦,如果它是“所以双方都看到同一件事情同时发生”,那么只需让一方成为“服务器”并告诉其他方开始采取行动就可能更轻松一些会因网络延迟而有所不同(可能为数毫秒)。

相关问题