是否有一种估算时钟偏差的算法可以在Http上工作?

时间:2011-02-22 08:57:48

标签: algorithm http windows-phone-7 multiplayer

我正在为Windows Phone 7编写一个多人游戏。我需要确保每个玩家同时发生事件。我目前的做法是提前播放我想要举办活动的时间,并依靠手机的时钟相当准确。

问题是,我已经看到一些时钟不准确的情况 - 它可能会在几秒钟内消失。所以我想要做的是估计电话时钟与服务器的时间有多么不同。当然,需要考虑网络延迟,特别是因为对我开放的唯一网络协议是Http。

所以我的问题是,有没有人知道我可以用来估算客户端和服务器之间时钟时间差异的算法,精度大约为100毫秒?

从我作为数学本科生的日子开始,我似乎记得有一个统计模型可以用于这种情况,我们正在采样一个假定由常数加误差量(延迟)组成的值可以假设遵循一些分布。有没有人知道这个,它确实适用吗?

2 个答案:

答案 0 :(得分:9)

Christian's algorithm(在与aaa's answer相关联的演示文稿中发现)原来就是我所需要的。

在我的博客上,我在服务器端使用WCF Rest,在客户端使用RestSharp和Reactive Framework,实现完整(而且相当优雅,如果我自己这么说!)。

以下是the blog post解释算法的摘录:

  
      
  1. 客户端向服务器发送消息:“现在是什么时候?”[添加'先生'狼'是可选的]。至关重要的是,它注意到它发送消息的时间(称之为T sent
  2.   
  3. 服务器尽可能快地响应,根据自己的时钟T server 给出时间。
  4.   
  5. 当客户收到消息时,它会记录收到的时间(称之为T received )。然后它做了一些数学运算:往返时间​​RTT,是T received - T sent 。因此,假设服务器立即响应,并且两个方向的网络延迟相同,这意味着服务器实际上在2秒前发送了RTT /消息。因此,在客户端收到消息的瞬间,服务器上的时间是T server + RTT / 2。然后,客户端可以与自己的时钟进行比较,并确定差异 - 时钟偏差。
  6.   

答案 1 :(得分:0)

不是统计模型/算法,而是......
我这样做是通过记录调用服务器并获得响应所花费的时间来完成的。

然后,我将使用这段时间的一半(假设它需要相同的时间来发送请求作为响应)来估计任何差异。我将半时间值传递给具有设备实际时间的服务器,并让服务器解决任何差异(占这半个时间间隔的偏移量)。

这将假设对服务器的第二次调用(具有半个时间跨度的那个)与第一个(定时的)请求一样长。 Web场,负载平衡器或不均匀的服务器负载可能会对此造成影响 确保您执行此过程的方法尽可能少,以避免额外的延迟。

您可以尝试拨打多个电话并使用时间平均值来考虑不同的请求时间。试验看这是否值得。

这一切都取决于你需要的准确程度。如果你真的需要(接近)完美的准确度,你可能会失去运气。