【发布时间】:2010-05-03 21:38:41
【问题描述】:
我正在构建需要通过 HTTP 和 FTP 进行大量文件传输的软件。通常,我使用 axel 或带有 pget 的 lftp 等多连接下载加速器获得更快的 HTTP 下载。在某些情况下,我发现文件传输速度提高了 2 到 3 倍,例如:
axel http://example.com/somefile
或
lftp -e 'pget -n 5 http://example.com/somefile;quit'
对比只使用 wget:
wget http://example.com/somefile
但其他时候,wget 比 lftp 快得多。奇怪的是,即使我使用 get 进行 lftp 也是如此,就像这样:
lftp -e 'pget -n 1 http://example.com/somefile;quit'
我了解通过多个连接下载文件并不总是会加快速度,具体取决于带宽的限制方式。但是:为什么会慢?尤其是在使用 -n 1 调用 lftp/pget 时?
【问题讨论】:
-
这应该在superuser.com
-
您的软件不应该在命令行中运行。使用 curl,它包含大多数主要语言的包装器。
-
@Byron Whitlock - 出于好奇,为什么不呢?我经常发现使用子进程比在我的应用程序中添加一堆库代码更好。恕我直言,它既有优点也有缺点。
-
@jondahl 恕我直言,你没有得到那么好的控制水平。当某些事情失败时,您必须解析一个字符串。您必须担心使用安装程序安装外部应用程序。使用库,您可以自己有效地执行多线程,这有时会更好。使用外部应用程序开发起来更方便,但在野外可能会让人头疼。
-
谢谢大家。 @Byron Whitlock,我为此使用了用 Ruby 包装的 libcurl,但是在 3GB 下载时写入文件时出现间歇性超时。这些工具在命令行级别得到了很好的优化和可靠。再加上加速下载的可能性,我选择了 lftp。