天天看點

Java程式如何限速

這裡簡單的讨論一下java設計網絡程式中如何控制上傳和下載下傳速度,我們常見的FTP,HTTP,BT等協定都是TCP的,但是現在流行的utorrent卻基于UDP實作了自己UTP協定(UDP+擁塞控制),不管使用什麼協定,站在I/O的角度來說,限速的控制思路都是一樣的。

思路很簡單,如下:

1.假設下載下傳或者上傳速度上限是m (KB/s),那麼發送一個固定的位元組資料(假設是n位元組)的時間花費是:n/m;

2.假設現在要發送n位元組的資料,那麼理論所需的時間應該是n/m,而在實際情況下,發送n位元組的資料隻花費了t秒,那麼發送該發送線程就應該睡眠n/m-t秒,這樣就基本實作了速度的控制。

代碼以TCP為例

速度控制

下載下傳控制

同樣,上傳控制

對于一個TCP socket

在多線程環境下也可以使用上述的方法。最後附圖是任務管理器的網絡使用率圖6250KB/s(也就是50000kb/s,附圖中網絡使用率也在5%左右,是以應該這個做法還算準确)

Java程式如何限速