【发布时间】:2010-09-22 05:30:10
【问题描述】:
我正在为我制作的游戏添加联网多人游戏。当服务器向客户端发送更新数据包时,我会包含一个时间戳,以便客户端确切知道该信息何时有效。但是,服务器计算机和客户端计算机的时钟可能设置为不同的时间(甚至可能只有几秒钟的差异),因此需要将来自服务器的时间戳转换为客户端的本地时间。
所以,我想知道计算服务器和客户端之间时间差的最佳方法。目前,客户端在初始化期间 ping 服务器以获取时间戳,记录请求的发送时间和响应时间,并猜测时间戳大约是在整个过程的中途生成的。客户还运行了 10 次这样的试验并取平均值。
但是,问题是我在重复运行程序时得到了不同的结果。在每组 10 个中,每个测量值的偏差很少超过 400 毫秒,这可能是可以接受的。但是,如果我在每次运行程序之间等待几分钟,则得到的平均值可能会相差 2 秒之多,这是不可接受的。
有没有更好的方法来计算两个联网设备的时钟之间的差异?或者至少有办法调整我的算法以产生更准确的结果?
可能相关或不相关的详细信息:这些设备是通过蓝牙进行通信的 iPod Touch。我正在测量 ping 的范围为 50-200 毫秒。我不能要求用户同步他们的时钟。 :)
更新:在以下答案的帮助下,我编写了一个 Objective-c 类来处理这个问题。我把它贴在我的博客上:http://scooops.blogspot.com/2010/09/timesync-was-time-sink.html
【问题讨论】:
标签: networking