首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Muduo 實現 Roundtrip 精準測量網絡延遲 (RTT)

     編輯:關於C++

測量原理

  1. Client 發送含本地時間 T1 的 16 字節定長消息。
  2. Server 立即原樣回射(含 T1、Server 收到時間 T2)。
  3. Client 收到時讀取本地時間 T3,RTT = T3 - T1,Clock Offset = (T2 - T1 + T2 - T3)/2 ≈ T2 - (T1+T3)/2。

簡化協議:Server 收到即回,耗時微秒級可忽略,消息對稱 16 Bytes(兩個 int64_t 微秒時間戳)。

定長消息解碼

while (buf->readableBytes() >= frameLen) {
    // 直接解析,無需 Codec
}

思考:若用 if 而非 while,單次 onMessage 到達多幀數據會堆積導致延遲錯誤。

Nagle 算法陷阱與 TCP_NODELAY

局域網 RTT < 200ms 正常;廣域網 RTT > 200ms 時,Nagle 合併小包導致測量值偏大。必須設定 TCP_NODELAY 關閉 Nagle,確保廣域網準確測量。

Clock Offset 應用

分布式系統中測得 Offset 經低通濾波後,可校正跨機器日誌時間戳,將「負延遲」修正為合理正值。

代碼位置

examples/roundtrip/roundtrip.cc

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved