時間同步算法探究


背景

時間同步這個問題其實大家都會遇到,比如最常見的,我們的電腦上設置時間為,選擇為 internet 時間同步,還有網游服務器面對各個客戶端的時間不固定,如何才能進行客戶端的時間同步,當然還有電商在搞活動的時候,也需要考慮同步客戶端的時間。

簡單的模型

客戶端每次請求服務端的時候,帶上偏移信息,服務端將客戶端上傳的數據時間部分進行矯正,主要是加上這個偏移值,那么客戶端如果計算這個偏移值呢?

假設

網絡傳輸時間不變

客戶端發送請求前的時間為 t1, 服務端接受請求的時間為 T1, 服務端處理完數據,開始響應數據的時間為 T2, 客戶端收到響應的時間為 t2。
client server
t1 -----> T1
-----------|
t2 <----- T2

本次同步網絡傳輸時間為
nt = (t2 - t1) / 2

偏移offset 定義為 同一時刻 服務端時間戳 - 客戶端時間戳

請求時offset1為:

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

響應時 offset2 為:

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

略去 nt :

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

計算模型

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

誤差分析:

由於網絡傳輸耗時不是一個常量,1 式 和 2 式 的 nt 並不相等

優化模型

將多次同步請求的偏移結果,剔除掉異常數據,剩下數據取平均值處理作為最終結果

具體為:

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM