簡體   English   中英

如何測量從客戶端發送數據到服務器所花費的時間

[英]How to measure time taken for sending data from client to server

我正在將數據從客戶端發送到服務器。 我想准確計算數據到達目的地所需的時間。 客戶端和服務器在不同的PC上,所以我認為使用系統時間是不明智的,因為它們在不同的系統上。

請告知測量數據到達目的地所用時間的最准確方法。

close將阻塞,直到所有數據都發送完畢,因此如果您從write開始時間,並在 close 之后close ,您將擁有發送時間。 對於 UDP,數據將已傳輸,對於 TCP,數據已被確認。 如果你發送到火星車,那么時間將是往返,但通常確認時間很短。

start_time = someTimeFunc();
char *foo = buf;
while (size) {
    ssize_t sent = send(sock,foo,size,flags);
    if (sent <= 0)
        fail;
    foo += sent;
    size -= sent;
}
close(sock);
end_time = someTimeFunc();

當應用程序“發送”數據時,數據實際上並沒有立即傳輸。 它被放入操作系統 kernel 中的隊列中,然后將控制權返回給應用程序。 kernel 將在自己的時間在后台傳輸排隊的數據。 無法知道 kernel 何時實際傳輸,或者數據到達目的地需要多長時間。 即使這樣,數據也會被放入接收端的另一個 kernel 隊列中,等待接收應用程序從該隊列中提取數據。

因此,完成您要求的唯一方法是讓接收方顯式向發送方發送確認,指定接收方實際讀取數據的時間 發送方和接收方必須在時間尺度上達成一致,例如 UTC,並且還必須將它們的時鍾同步到一個公共源。 然而,這並不是傳輸時間的真實反映,但如果發送者和接收者都及時處理它們各自的套接字 I/O,它可能會關閉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM