2013-05-30 60 views
1

我負責編寫客戶端數據下載系統(在Linux上),該系統使用FTP或HTTP從外部合作伙伴下載太比特大小的數據到本地站點。我們公司的網絡管理員告訴我,我不能超過一定的帶寬。對我來說,實施這樣一個系統的最佳方式是什麼?現有的庫是否存在?如何實現FTP/HTTP的客戶端帶寬限制?

我願意寫我自己的FTP和HTTP客戶端(用C或Java在Linux上),但寧願留出的內核。我知道我可以限制FTP/HTTP客戶端調用套接字read()的速率,但如果服務器端調用write()的速度超過了我的限制,會發生什麼情況?

+0

只要你使用的是TCP/IP,服務器將不會送東西比你讀書,我覺得快。在服務器可以發送另一個數據包之前,cliont必須確認一個數據包。 – YankeeWhiskey

+0

謝謝。我忘了TCP的流量控制,所以這部分答案。但是我仍然在尋找實施節流的最佳方法。 – stackoverflowuser2010

+0

閱讀內容,使用數據包大小來計算睡眠時間,然後重新閱讀。 – YankeeWhiskey

回答

1

您可以在InputStream之上構建另一個圖層:在read方法中,您可以計算目前爲止的字節數。如果每秒字節數超過某個限制,讓下載線程休眠一段時間。其餘的是TCP的流量控制。

+0

您是不是故意在InputStream的read()方法(從套接字讀取的方法)中執行sleep? – stackoverflowuser2010

+0

這樣比較好。其實我已經看過我前段時間執行過的*上傳*限制代碼。可能兩者都有效,但是,放入read()會更好。我糾正了我的答案。 – Beryllium

0

我知道Apache JMeter模擬慢速連接。你可以看看the code

0

如果您知道網絡路徑的延遲,你可以只設置您的TCP接收緩衝區大小爲所需的帶寬時延產品。這會扼殺發送者。但是由此產生的價值對於你的平臺來說可能太小了,所以它可能會向上調整它。設置後請檢查該值。

請問您NETADMIN知道,TCP自動共享帶寬公平?

0

你開到現成的GUI或命令行產品? Filezillia提供了這個。 還有一個叫做lftp的linux命令行客戶端。一個可設置的參數是net:limit-total-rate,它將限制傳輸速率。由於該客戶端一次支持多次傳輸,因此它還具有參數net:limit-rate。