時間同步這個問題其實你們都會遇到,好比最多見的,咱們的電腦上設置時間爲,選擇爲 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
將屢次同步請求的偏移結果,剔除掉異常數據,剩下數據取平均值處理做爲最終結果
具體爲:
http://blog.csdn.net/xufeng0991/article/details/43276363
https://wenku.baidu.com/view/a5e76c07f242336c1fb95e46.html