在数据传输的时候,我们希望实现以下目标:
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 输出帮助信息 ![](https://i-blog.csdnimg.cn/blog_migrate/1af5dd0e7a93c5457727df88ddbed490.jpeg)
命令行参数解释 -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 : 打印版本信息
使用范例 性能测试 情景一 ![](https://i-blog.csdnimg.cn/blog_migrate/bd9c8fb3b870042d0644111552b3560e.jpeg)
情景二
![](https://i-blog.csdnimg.cn/blog_migrate/4accdbc0850562c6d84340a6b22fec0e.jpeg) 说明: 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 不支持整个目录下载
|
|
转载于:https://blog.51cto.com/baidutech/748333