9月 062011
 

在数据传输的时候,我们希望实现以下目标:
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

实现目标
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

系统依赖
1. perl,版本>=5.8.5
2. linux or windows

目前实现的功能
支持FTP和HTTP下载
支持断点续传(HTTP and FTP)
多线程下载加速(线程数目可以任意指定)
支持限速

下载的同时进行流式的md5计算,下载完毕即可生成整个文件的md5(可以使用参数指定是否需要计算md5)

命令行参数选项类似于wget
跨平台(windows && linux)

使用示例
./lwget -v 输出帮助信息

命令行参数解释
-d|–debug : 输出debug信息,比如FTP或者HTTP的连接信息
-c|–continue: 是否需要续传
-b|–block-size : 指定数据分块大小,默认为3M,测试得出性价比较高
-s|–limit-rate: 最大速度,默认为25M/s
-o|–output-file : 下载到本地的文件命名,不指定默认采用源文件名
-n|–thread-num:下载线程数目,默认为4,建议保持在16以下
-m|–md5 : 指定是否计算文件md5,-m表示计算md5,且md5文件的命名为输出文件.md5;-m foo.md5 则指定md5文件名称为foo.md5
-q|–quiet : 屏幕不打印信息,类似于wget -q参数
-h|–help : 输出帮助信息
-v|– version : 打印版本信息

使用范例

性能测试

情景一

情景二

说明:
1. 采用HTTP协议下载对上下游的消耗更少
2. FTP协议下载时,多线程(10个线程以上),大文件(10G左右)会对上游造成较大的压力(cpu_idle降到50%),对下游无特别影响
3. 如果不计算md5,对下游的压力会变的更小
4. 在高速网络中,性能不如wget,wget可以下载到100m/s,而lwget只能达到80m/s的速度,且系统的负载要比使用wget高
5. 限速在20M/s以下的时候,和wget的性能比较接近.

优缺点

优点
在低速网络中,下载速度很快(很容易的维持在20m/s)
边下载边计算md5,避免了在文件下载完之后计算md5耗时耗资源(11G的文件做md5校验耗时在5分钟左右,使用lwget可以免去这个时间和消耗)
lwget代码简洁(只有19K),易于维护
很方便的支持续传(FTP 和 HTTP)
可以在windows下直接使用

缺点
在高速下载的时候,性能不如wget
不支持整个目录下载

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>