2013-07-19 14 views
1

我正在使用TCP服務器,並且想知道我應該通過連接推送多少數據。問題是如果我發送大量數據(例如10 MB)但連接速度很慢(如64 kBit/sec)會發生什麼?數據是否會保留在操作系統的緩衝區中,還是會被推送到互聯網並在某種互聯網提供商服務器中緩衝?測量傳輸速率是否有意義,只能推出與連接可處理的數據一樣多的數據?如何確定應該通過TCP連接推送多少數據?

回答

1

如果我發送大量數據(例如10 MB)但連接速度較慢(如64 kBit/sec)會發生什麼?

您的send()將在阻止模式下阻止或在非阻止模式下返回-1/EAGAIN/EWOULDBLOCK

將數據留在操作系統

是的緩衝區內。

還是將它推送到互聯網,並在某種互聯網提供商服務器緩衝?

會是有意義的測量傳輸速度率,推動了只有儘可能多的數據連接可以處理?

絕對不是。 TCP已經完成了。

2

TCP通常是建立在假設緩衝將發生在任意位置的情況下。有些應用程序會在您自己的應用程序中(當寫入呼叫阻止時),一些會在操作系統中,一些在路由器中,另一些在接收器的操作系統中(應用程序讀取數據之前)。

如果你編寫的數據量非常大,而且鏈接速度要慢得多,你的應用程序將會被阻塞,因爲OS緩衝區的大小是有限的。如果你不希望你需要使用非阻塞API並根據需要返回服務套接字。

如果您關心延遲,那麼TCP並不適合,它會嘗試優化帶寬和公平性。

如果你會嘗試測量寫入端的傳輸速度,只有你會得到一個歪斜的結果,因爲前幾兆字節會飛過,因爲它們被操作系統和路由器排隊,然後一切都會慢下來,大約是真實的速度,但會抖動很多。我看不出有這麼好的理由。

相關問題