我正在嘗試測量套接字連接的 ping。
像這樣;
服務器:向客戶端發送 ping
客戶端:接收 ping 并將當前時間編碼為回應
服務器:解碼回應并計算 ping 為 = 當前時間 - 回應時間
從理論上講,這應該告訴我一個相當準確的資料從客戶端傳輸到服務器的時間量的測量值。
問題是來自客戶端(linux VM)的編碼時間(毫秒)比發送 ping 時快取在服務器上的時間早 ~4 秒。
看起來 Instant.now() 正在跨機器回傳不一致的結果。
我已經通過簡單地輸出 Instant.now().toEpochMilli() 確認了這一點
“同時”運行兩個測驗,VM 上的時間落后幾秒?這里發生了什么?
uj5u.com熱心網友回復:
VM 默認占用服務器時間。所以你需要檢查你的服務器機器上設定的時間。
基本上服務器和客戶端是兩臺不同的機器。這兩臺機器的時間不同步。您需要檢查機器時間并糾正不正確的地方。 這與Java無關。
uj5u.com熱心網友回復:
謝謝@aatwork 提供的資訊,我已經解決了我的問題。
問題來自于我對時間和 UTC 在全球范圍內的作業方式缺乏了解,并且任何個人機器都可能有偏移量。
要糾正這一點,應該從NTP服務器輪詢時間。這樣做將允許跨多臺機器同步結果。
在 Java 中查詢 NTP 服務器
依賴:Apache Commons Net
頂級公共時間服務器串列
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535931.html
