Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否有一种算法可以估计Http上的时钟偏差?_Algorithm_Http_Windows Phone 7_Multiplayer - Fatal编程技术网

Algorithm 是否有一种算法可以估计Http上的时钟偏差?

Algorithm 是否有一种算法可以估计Http上的时钟偏差?,algorithm,http,windows-phone-7,multiplayer,Algorithm,Http,Windows Phone 7,Multiplayer,我正在为WindowsPhone7编写一个多人游戏。我需要确保每个球员的比赛同时进行。我目前的做法是提前广播我希望活动发生的时间,并依靠手机时钟的准确度 问题是,我见过一些时钟不准确的情况——它可能会出现几秒钟。所以我想做的是估计电话时钟的时间与服务器的时间有多大的不同。当然,还需要考虑网络延迟,特别是因为对我开放的唯一网络协议是Http 所以我的问题是,有谁知道一种算法,我可以用它来估计客户端和服务器之间的时钟时间差,精确到100毫秒左右 从我读数学本科时起,我似乎记得有一个统计模型可以用于这

我正在为WindowsPhone7编写一个多人游戏。我需要确保每个球员的比赛同时进行。我目前的做法是提前广播我希望活动发生的时间,并依靠手机时钟的准确度

问题是,我见过一些时钟不准确的情况——它可能会出现几秒钟。所以我想做的是估计电话时钟的时间与服务器的时间有多大的不同。当然,还需要考虑网络延迟,特别是因为对我开放的唯一网络协议是Http

所以我的问题是,有谁知道一种算法,我可以用它来估计客户端和服务器之间的时钟时间差,精确到100毫秒左右


从我读数学本科时起,我似乎记得有一个统计模型可以用于这种情况,即我们对一个值进行采样,假设该值由一个常数加上一个误差量(延迟)组成,该误差量可以假设服从某种分布。有人知道这一点吗?它是否真的适用?

不是统计模型/算法,而是…
我会通过记录打电话给服务器并得到回复所花费的时间来实现这一点

然后,我将使用一半的时间(假设发送请求和响应所需的时间相同)来估计任何差异。我会将半时间跨度值与设备的实际时间一起传递给服务器,并让服务器计算出任何差异(考虑半时间跨度偏移量)

这将假定对服务器的第二次调用(时间跨度为一半的调用)与第一次(定时)请求所用的时间相同。web场、负载平衡器或不均匀的服务器负载可能会影响这一点。
确保执行此过程的方法尽可能少地执行其他操作,以避免额外的延迟

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

这完全取决于你需要的东西有多准确。如果你真的需要(接近)完美的准确度,你可能会运气不佳。

(在链接到的演示中发现)正是我所需要的

在我的博客上,我有一个完整的(如果我自己这么说的话,也是相当优雅的!)实现,在服务器端使用WCF Rest,在客户端使用RestSharp和反应式框架

下面是解释算法的摘录:

  • 客户端向服务器发送一条消息:“几点了?”[添加'Mr.Wolf'是可选的]。关键的是,它会记录发送消息的时间(称为Tsent)
  • 服务器以最快的速度响应,根据自己的时钟Tserver给出时间
  • 当客户机收到消息时,它会记录收到消息的时间(称之为Treceived)。然后它做了一些数学运算:往返时间RTT是t接受的–Tsent。因此,假设服务器立即响应,并且网络延迟在两个方向上是相同的,这意味着服务器实际上在2秒钟前发送了消息RTT。因此,在客户端接收消息的那一刻,服务器上的时间是Tserver+RTT/2。然后,客户端可以与自己的时钟进行比较,并确定差异——时钟偏移

  • 我很确定延迟不是正态分布的。我经常得到平均值+几个标准差的异常值延迟。我从未得到平均值的异常值延迟-几个标准差,即在发送ping之前响应到达;-)你说得很对,史蒂夫-纠正了!