多线程下载原理

2018年12月5日 0 作者 筱枫

现在的各大下载工具几乎都拥有多线程下载功能,主要的目的还是加快下载
具体原理如下

下载工具将待下载的文件分块,每个线程负责一个块下载
例如下载1K的数据,分为两块,用两个线程来,第一个线程负责0-512B, 第二个线程512-1024B这样犀利士
,最后再由主线程合并,或者直接写入文件(如果预先分配了空间的话)

那么问题来了,挖掘机…………
如何向服务器请求对应区块的信息呢?
在请求头上加上:Range: bytes=0-512
即可

同理,断点续传也是用的这个原理,所以如果不支持断点续传的主机,也不支持多线程下载
不过注意,大多数服务器,像是nginx,apache等都支持Range,区别在于如何开启
nginx可以加入如下指令

add_header Accept-Ranges bytes;

来支持

例如我们可以用curl来试验一下

curl http://blog.xiaofeng-working.xyz/wp-content/uploads/2018/11/magnifier_test.html -i -H "Range: bytes=0-50"

可以明显看到只请求了一部分,同时响应不是正常的200,而是206

详情可参考:
HTTP请求范围