首页 > 两台电脑分别下载同一文件前半部分 后半部分,最终可以合并成同一文件吗

两台电脑分别下载同一文件前半部分 后半部分,最终可以合并成同一文件吗

我有两台电脑,分别下载同一个文件的前半部分和后半部分(两个是相同的文件,只不过里边包含的是同一文件的不同部分,假设已经多线程实现了下载),下载完后可以合并成同一文件?

一方:这原理和多线程下载一样,肯定能合成原先同一文件。
另一方:这是已经下完的文件合并,与多线程无关,且至今未见这样的软件。


完全就是多线程下载的原理,只不过两个线程跑在不同的电脑上而已。


只要服务器对于用一个 URL 给你的是同一个文件,就显然可以啊。

基本就是在 HTTP request header 里指定不同的的 Range,下载一个文件的不同部分。

下载下来的两个部分直接连起来就行了。


UPDATE:随手 google 了一下,我还真找到有人想到了这个主意:https://code.google.com/p/qoctopus/


可以。

比如说这个文件的长度是n字节,A电脑下载前k个字节,B电脑下载后面n-k个字节。
下载完毕之后,把两部分copy合并到一起即可。

之所以没这方面的软件,是因为没有需求。下载文件时,瓶颈通常出现在网络传输上,增加电脑并不能解决这个问题。如果网速足够快(如10G的LAN),瓶颈在硬盘IO上,即使分成两部分下载了,还得合并,也没节省时间,徒然增加了一次网络传输和一次硬盘IO(两部分汇总到同一台电脑)。

如果你自己出于好奇想做实验,利用手头已经有linux命令就可以组合起来:

第一步:分别在A、B两台电脑上用curl下载同一个文件,通过Accept-Ranges头指定哪个电脑下载哪一段

curl -H Accept-Ranges=0-102400 http://192.168.0.1/bigfile.iso -o part_1.iso
curl -H Accept-Ranges=102401- http://192.168.0.1/bigfile.iso -o part_2.iso

第二步:用scp把part_1.iso传到B电脑上

scp user@hosta:/path/to/part_1.iso /parent_dir/of/part_2.iso/part_1.iso

第三步:把part_2.iso和part_1.iso合并成一个文件

cat part_2.iso >> part_1.iso

一般的Web Server(如apache,nginx)都支持Accept-Ranges,如果你的Web Server恰好不支持,那你在A,B两台电脑上下载的将是两份完整的bigfile.iso,就没必要再合并了。

【热门文章】
【热门文章】