java优化上传速度慢怎么办_Java程序如何限速(控制下载和上传速度)

  • Post author:
  • Post category:java


转自 http://www.blogjava.net/canvas/articles/bandwidthlimiter.html

这里简单的讨论一下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为例

速度控制

1 package com.actiontec.net.bandwidth;

2

3 /**

4  *

5  * @author Le

6  *

7  */

8 public class BandwidthLimiter {

9

10     /* KB */

11     private static Long KB = 1024l;

12

13     /* The smallest count chunk length in bytes */

14     private static Long CHUNK_LENGTH = 1024l;

15

16     /* How many bytes will be sent or receive */

17     private int bytesWillBeSentOrReceive = 0;

18

19     /* When the last piece was sent or receive */

20     private long lastPieceSentOrReceiveTick = System.nanoTime();

21

22     /* Default rate is 1024KB/s */

23     private int maxRate = 1024;

24

25     /* Time cost for sending CHUNK_LENGTH bytes in nanoseconds */

26     private long timeCostPerChunk = (1000000000l * CHUNK_LENGTH)

27             / (this.maxRate * KB);

28



版权声明:本文为weixin_32181267原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。