2011-10-22 76 views
1

我想知道如何在運行時最好地測量網絡吞吐量。我正在寫一個客戶端/服務器應用程序(都在java中)。服務器定期通過套接字向客戶端發送(壓縮媒體數據的)消息。我想調整服務器使用的壓縮級別以匹配網絡質量。如何在運行時測量網絡吞吐量

所以我想測量一大塊數據(比如500kb)完全到達客戶端所需的時間,包括兩者之間的所有延遲。像Iperf這樣的工具似乎不是一種選擇,因爲他們通過創建自己的流量來進行測量。

我能想出的最好的想法是:以某種方式確定客戶端和服務器的時鐘差異,包括服務器發送每條消息的時間戳,然後讓客戶端向服務器報告此時間戳和時間之間的差異客戶端收到該消息。然後,服務器可以確定消息到達客戶端的時間。

有沒有更簡單的方法來做到這一點?有沒有這方面的圖書館?

+0

我不明白爲什麼要在開始爲客戶端服務時檢查服務器端的時間並檢查最後的持續時間會很困難。 – MarianP

+0

那麼你會如何檢查持續時間? –

回答

1

一個簡單的辦法:

保存在服務器上的時間戳發送之前定義的包的數量。

然後將包發送到客戶端,讓客戶端在收到最後一個包時向服務器報告。

當客戶端應答時,在服務器上保存新的時間戳。

您現在需要的全部內容是根據兩個時間戳之間的差異來確定RTT和減去RTT/2。

這應該會給你一個相當準確的測量。

+0

好主意!會更容易。如果RTT保持不變並且客戶端到服務器通道沒有擁塞。 –