在数据传输的时候,我们希望实现以下目标:
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

 不支持整个目录下载