JAVA怎么实现下载上传限速 数据来了,你只要不从InputStream里面读取就限速了啊,缓冲区满了,对方就发不动了。如果要精确限速,就是根据时间间隔从InputStream读取数据。比如你的每次读取都是 byte[1024] 也就是1KB,如果要控制上传速度是 10KB/s,那么粗略点的控制方式就是每隔100ms读取一次1KB。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不太同意LS的看法,在客户端塞满缓冲区的话可能会导致数据包被丢弃的,下载限速还是要在PEER端来控制,你客户端要通知和你连接的PEER控制发出的流量,就像TCP里的窗口算法一样有一个协商的过程 迅雷是通过这种方式实现的么?我试了一下,很难做到想迅雷那样精确的说。比如我限速400KB/s,然后延时1000/400ms去读一次缓冲区,每次读1K,最后在360加速球上显示的速度是340KB/s 原理是这么个原理,但是具体实现起来,控制的方式很多样。精确度要比较高的控制的话,一个是读取频度要高,另一个是需要采用增量计算的方式。否则每两次读取之间所浪费的时间开销,和读取本身的时间开销你就没有计入了。再另外就是你用Sleep的方式控制间隔,本身也不准确。简易模型可以这么做(假定期望控制速度为 100KB/s):◎ 获取当前时间戳 current;◎ 计算当前时间距离上次读取时间实际间隔多少ms;◎ 计算这段间隔时间内,按目标控制速度,应读取的字节数;◎ 将当前时间戳 current 时间设置给 上次读取时间戳 last◎ Sleep 10ms;◎ 循环到最前面这样你的模型可以把几乎所有时间开销都计算在内。 如何去掉websphere的ssl,不用https访问websphere??急!!急!!!!!!!!!!!! 怎么按顺序发牌给两个人啊? 如和将dom4j-1.6.zip整合到MyEclipse6.0中? hibernate+spring 中的查询语句 两个JBuilderX开发例子 没分了,不好意思,一个关于char的问题。 16进制字符串处理 is.read(byte[] b, int off, int len)的问题??高分求救!!! 关于OA系统的开发 Java怎么样求水仙花数呢 httpclient 4.3 通过验证码登录总是失败,请高手指教! java应用自动升级如何实现
迅雷是通过这种方式实现的么?我试了一下,很难做到想迅雷那样精确的说。
比如我限速400KB/s,然后延时1000/400ms去读一次缓冲区,每次读1K,最后在360加速球上显示的速度是340KB/s
原理是这么个原理,但是具体实现起来,控制的方式很多样。精确度要比较高的控制的话,一个是读取频度要高,另一个是需要采用增量计算的方式。否则每两次读取之间所浪费的时间开销,和读取本身的时间开销你就没有计入了。再另外就是你用Sleep的方式控制间隔,本身也不准确。简易模型可以这么做(假定期望控制速度为 100KB/s):
◎ 获取当前时间戳 current;
◎ 计算当前时间距离上次读取时间实际间隔多少ms;
◎ 计算这段间隔时间内,按目标控制速度,应读取的字节数;
◎ 将当前时间戳 current 时间设置给 上次读取时间戳 last
◎ Sleep 10ms;
◎ 循环到最前面这样你的模型可以把几乎所有时间开销都计算在内。