2013-03-05 63 views
0

快速問題:哪一個tcp連接更快?

我使用boost:asio(tcp)通過網絡發送數據。哪一個會更快:使用流緩衝區,還是手動分組和發送數據?

特別是,如果要傳輸的數據大小通常超過100MB?

謝謝!

回答

2

「更快」 可能意味着兩種不同的東西:

  1. 最小延遲。這意味着最小化分組數據生成和客戶端接收之間的時間。在這種情況下,它的「更快」可以在具有TCP_NODELAY選項的套接字上手動創建數據包。

  2. 最大化帶寬速度。這意味着您想要以最大Mb/s速度傳輸數據(例如文件)。在這種情況下,最好禁用TCP_NODELAY併發送數據sendfile(2)

現在關於boost :: asio。這對於設置TCP_NODELAY選項的最小延遲也是如此(example for this)。爲了獲得最大總傳輸速度,最好關閉此選項並使用streambuffer,或通過native_handle()並使用sendfile對其進行本地處理,並使用sendfile(在這種情況下,需要完成更多工作以使其「良好」異步) 。

+0

謝謝。這回答了我有關性能的很多問題。我將設置TCP_NODELAY並使用流緩衝區。 – lanortha 2013-03-06 23:57:00

0

你越是想到這一點,就越會得到TCP執行其工作的方式,而且執行的越糟糕。只需傳輸數據,儘可能使用大緩衝區。

+0

感謝您的回覆。我想我會走緩衝路線。 – lanortha 2013-03-06 23:55:47