迅雷等下载工具是怎么样实现下载时智能限速这个功能的呢?
RT
HTTP或FTP协议好像没有规定这方面的内容啊。还是我没找到这方面的内容呢?
[解决办法]
1个task被拆成5个thread,每个thread在下载中累计的字节都记录到task中,用于计算该任务的下载速度,并且当前task有5个引用,表示task还没有完成。
如果某个thread发现下载速度超过总速度,就不继续接受数据了,单纯的select 1秒超时检测下载速度是否降低到限制以下,达到限制以下则继续接受数据,不过最好不要太久,HTTP服务器对长时间无活动的客户端会断开的,断开后thread还需要从断点续传即可,就用个HTTP Range头的事。