Sam*_*ack 5 algorithm http multiplayer windows-phone-7
我正在为Windows Phone 7编写一个多人游戏.我需要确保每个玩家同时发生事件.我现在的方法是提前播放我希望活动发生的时间,并依靠电话的时钟相当准确.
麻烦的是,我已经看到一些时钟不准确的情况 - 它可能会在几秒钟内消失.所以我想要做的是估计电话时钟与服务器的时间有多么不同.当然,需要考虑网络延迟,特别是因为对我开放的唯一网络协议是Http.
所以我的问题是,有没有人知道我可以用来估计客户端和服务器之间时钟时间差异的算法,精度大约是100ms?
从我作为数学本科生的日子开始,我似乎记得有一个统计模型可以用于这种情况,我们正在采样一个假定由常数加上误差量(延迟)组成的值.假设遵循一些分配.有人知道这个,它确实适用吗?
Christian的算法(在与aaa的答案相关的演示文稿中发现)证明是我所需要的.
在我的博客上,我在服务器端使用WCF Rest,在客户端使用RestSharp和Reactive Framework,实现完整(而且相当优雅,如果我自己这么说!).
以下是解释该算法的博客文章的摘录:
- 客户端向服务器发送消息:"现在是什么时候?"[添加'先生' 狼'是可选的].至关重要的是,它记录了发送消息的时间(称之为T 发送)
- 服务器尽可能快地响应,根据自己的时钟T 服务器给出时间.
- 当客户端得到消息,它指出收货时间(称之为牛逼收到).然后它做了一些数学运算:往返时间,RTT,是T 接收 - T 发送.因此,假设服务器立即响应,并且两个方向的网络延迟相同,这意味着服务器实际上在2秒前发送了RTT /消息.因此,在客户端收到消息的瞬间,服务器上的时间是T server + RTT/2.然后客户端可以与自己的时钟进行比较并确定差异 - 时钟偏差.