axel简介

axel是一个命令行下的轻量级http/ftp 下载加速工具,支持多线程下载和断点续传,支持从多个镜像下载同一文件。

axel的用法如下:

axel源码学习(0)——程序逻辑-LMLPHP

图 0.1 axel usage

axel 粗读

首先需要了解axel的用法,实际上参数选项比较少,简单看一下就能明白。在阅读源码的时候有时候需要回过头看一看选项的作用,使得代码更加容易看懂。另外,我建议可以修改一下configure文件的debug选项,这样编译完成之后可以使用gdb进行调试追踪,而且从代码上可以看出,debug版本的axel在使用的时候会输出更多更加详细的信息,这些信息在我们搞清楚流程上有比较大的帮助。

 

axel 是一个非常轻量级的下载工具,代码量比较少,文件组成也相对简单。

 

axel.h  axel.caxel结构体定义和操作,下载的主体部分在这里面实现
conf.h  conf.h故名思议,这是有关配置的文件,至于配置的细节留待以后分析
conn.h  conn.h这也很显然是connection相关
ftp.h  ftp.cftp协议相关的实现
http.h http.chttp协议相关实现
search.h search.c这里的search是指的搜索镜像网站,由选项-S控制(如图 0.1)
tcp.c  tcp.hTCP控制相关实现
text.c下载状态显示相关实现。注意:程序的main函数也在这个文件中!!

 

理清了文件的组成之后,有的放矢,打开text.c来看看程序的主体流程是怎样的,目前不分析细节,只从main函数中梳理出大致的流程,细节留到后续详细分析。

画了一个流程图:

axel源码学习(0)——程序逻辑-LMLPHP

 

图 0.2 axel main函数流程

老实讲,这个流程非常的不专业,非常的简陋,但是这也算是一个开头,一点一点地慢慢地深入。在之后的文章中主要从下面几个方面来分析:

  1. 下载的详细过程。
  2. 数据结构的分析。
  3. 相关协议的分析。
  4. 实现细节的分析。
  5. 设计思想的分析。
  6. 编程技巧的分析。

这是我暂时想到的几个方面,读源码最主要是要学习别人的编程思想和编程技巧,所以还是必须精读,这个过程下来我想会学到很多东西。axel源码里涉及到的很多技术我都不熟悉,但是我并不打算把这些必要都都学习一遍再来读,而是遇到难题再解决难题。另外,网上有一些别人的经验可以参考(但是不能依赖别人的分析)。源码的分析虽然可能会比较细致(因为有很多东西需要我去学习),但是有些细枝末节的东西还是略去,比如国际化(I18n)的问题等等。

04-23 19:29