時間同步算法探究

背景

時間同步這個問題其實你們都會遇到,好比最多見的,咱們的電腦上設置時間爲,選擇爲 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

相關文章
相關標籤/搜索