我正在为我制作的游戏添加联网多人游戏。当服务器向客户端发送更新数据包时,我会包含一个时间戳记,以便客户端确切知道该信息何时有效。但是,服务器计算机和客户端计算机可能会将其时钟设置为不同的时间(甚至可能差几秒),所以服务器的时间戳需要转换为客户端的本地时间。测量联网设备之间的时间差异
所以,我想知道计算服务器和客户端之间时差的最佳方法。目前,客户端在初始化过程中向服务器发送一个时间戳记,记录了请求的发送时间和应答时间,并且猜测时间戳记大概是在旅途中途产生的。客户也运行这些试验中的10个,并取平均值。
但问题是,我得到不同的结果重复运行的程序。在每组10个测量中,每个测量很少会发生400多毫秒的偏差,这可能是可以接受的。但是如果我在程序的每次运行之间等待几分钟,结果平均值可能会有2秒钟的不同意见,这是不可接受的。
有没有更好的方法来找出两个联网设备的时钟之间的差异?还是至少有一种方法来调整我的算法,以产生更准确的结果?
可能相关或不相关的细节:设备是通过蓝牙进行通信的iPod Touch。我测量的平均值是50-200毫秒。我不能要求用户同步他们的时钟。 :)
更新:在下面的答案帮助下,我写了一个Objective-C类来处理这个问题。我发布在我的博客上:http://scooops.blogspot.com/2010/09/timesync-was-time-sink.html
哇!谢谢!这正是我要找的。对我来说这并不完全清楚,但为什么这比我最初的方法更好(虽然我相信它),但是当我尝试时我会回到这里。我认为我不需要在整个游戏过程中进行调整,但如果需要的话,应该不难做到。再次感谢! – whooops 2010-09-21 00:19:56
这工作得很好。我发现,如果我总是采用最小(即最负)的t1和t2值,这与采用最小的ping相同,所以它会收敛到正确的偏移量。 我已经 T1 =客户邮票 - 服务器邮票 和 T2 =服务器邮票 - 客户端邮票 另外,我发现,iPhone手机相当显著漂移!在半小时内,两台设备之间的实际偏移可能会改变半秒钟。我使用与NTP服务器联系的时钟程序对此进行了验证。 – whooops 2010-09-21 20:28:49
很高兴它对你有帮助。 – 2010-09-21 20:35:48