zoukankan      html  css  js  c++  java
  • axel源码学习(0)——程序逻辑

    axel简介

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

    axel的用法如下:

    image

    图 0.1 axel usage

    axel 粗读

    一、源码阅读准备

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

    二、理清文件组成

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

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

    三、简单流程

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

    画了一个流程图:

    axel流程

    图 0.2 axel main函数流程

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

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

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

  • 相关阅读:
    一款炫酷Loading动画--载入失败
    ITK Configuring and Building in VisualStudio及hello world程序编译
    InnoDB: Error: log file .ib_logfile0 is of different size 0 10485760 bytes
    vim学习笔记(1)——vim操作
    Android数据格式解析对象JSON用法
    JSONObject与JSONArray的使用
    AsyncHttpClient来完成网页源代码的显示功能,json数据在服务器端的读取还有安卓上的读取
    android开源框架android-async-http使用
    开源框架AsyncHttpClient使用
    Android:Layout_weight的深刻理解
  • 原文地址:https://www.cnblogs.com/jaletech/p/3389064.html
Copyright © 2011-2022 走看看