时间同步算法探究

背景

时间同步这个问题其实你们都会遇到,好比最多见的,咱们的电脑上设置时间为,选择为 internet 时间同步,还有网游服务器面对各个客户端的时间不固定,如何才能进行客户端的时间同步,固然还有电商在搞活动的时候,也须要考虑同步客户端的时间。html

简单的模型

客户端每次请求服务端的时候,带上偏移信息,服务端将客户端上传的数据时间部分进行矫正,主要是加上这个偏移值,那么客户端若是计算这个偏移值呢?服务器

假设

网络传输时间不变网络

客户端发送请求前的时间为 t1, 服务端接受请求的时间为 T1, 服务端处理完数据,开始响应数据的时间为 T2, 客户端收到响应的时间为 t2。
client server
t1 -----> T1
-----------|
t2 <----- T2优化

本次同步网络传输时间为
nt = (t2 - t1) / 2.net

偏移offset 定义为 同一时刻 服务端时间戳 - 客户端时间戳code

请求时offset1为:server

offset1 = T1 - nt - t1   ---------1

响应时 offset2 为:htm

offset2 = T2 + nt - t2    ----------2

略去 nt :blog

offset = (offset1 + offset2) / 2 = (T1 - t1 + T2 - t2) / 2

计算模型

offset = (T1 - t1 + T2 - t2) / 2

偏差分析:

因为网络传输耗时不是一个常量,1 式 和 2 式 的 nt 并不相等get

优化模型

将屡次同步请求的偏移结果,剔除掉异常数据,剩下数据取平均值处理做为最终结果

具体为:

  1. 隔 200ms 发起一次同步请求,一共发起 5 次 同步请求,记录五次的偏移结果为: offsets {offset1, offset2, offset3, offset4, offset5}
  2. 取 offsets 的中位数 offset0
  3. 求取方差
  4. 将 offsets 中平方小于方差的累加求和,而后取平均值 offset
  5. offset 做为时间同步的偏移

其余

http://blog.csdn.net/xufeng0991/article/details/43276363
https://wenku.baidu.com/view/a5e76c07f242336c1fb95e46.html

相关文章
相关标签/搜索