Apache源代码全景分析(第1卷):体系结构与核心模块
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 Apache目录

在了解整个 Apache 体系结构之前,我们须先了解 Apache 的源代码是如何组织的。Apache 2.0版和1.3版相比,源代码的组织发生了一些重要的变化。Apache 1.3版的目录结构如图2-1所示。

图2-1 Apache 1.3的源代码组织结构

Apache 1.3.7版本的源代码中一共包含了44个子目录,共计780个文件。其中,235个文件是用C语言编写的。在所有的目录中最重要的是src目录,其中包含了Apache服务器中所有的源代码,包括核心模块及大部分模块的代码。对大多数人而言,感兴趣的可能就是main和modules两个模块,其中包含了理解Apache是如何工作的核心代码。

由于1.3版本不是我们研究的对象,因此不做过多的讨论。

Apache 2.0系列的版本与Apache 1.3相比,整个目录的层次发生了较大的变化,图2-2是2.0.45版本的目录结构。

图2-2 Apache 2.0的源代码组织结构

与1.3版本相比,Apache 2.x的内容更多。Apache 2.0.45版本中包含了2 165个文件,分布在183个目录中。其中704个文件是用C语言源代码编写的,而且整个目录结构发生了巨大的变化,层次变得更加清晰。不过对于开发者而言,最重要的目录仍然是很少的几个,比如server目录、modules目录。

整个Apache核心功能包括请求处理、协议处理等功能,实现文件全部包含在server目录中,server目录中又包含一个称之为mpm的目录。在1.3版本中,Apache仅仅支持准备创建进程的一种并发方式,这是一直为人所诟病的地方。在2.0以上的版本中,Apache推出了多种进程并发模型,包括线程池、预创建等,这些都被称之为多进程处理模块(MPM)。它们之间既相互独立,又能相互替换。这些模块统统保存在mpm目录中。每一种并发模型对应一个.c文件。

另外一个重要的目录就是 modules,顾名思义,其中保存着 Apache 中的所有模块。每一个模块占有一个目录,比如AAA认证模块目录为aaa,代理模块名称为proxy。

include 目录包含了 Apache 中必需的头文件,其中包含一些极其重要的头文件,比如http_main.h、http_protocol.h、http_request.h等。

srclib目录中包含了Apache开发和运行所需要的基础库,主要包括apr_util、apr和pcre。apr_util和apr属于APR基础库,将在卷3中详细描述,pcre则主要是Perl兼容正则表达式库。

关于开发的最后一个重要目录就是os目录了。尽管APR提供了跨平台的保证,但是各种操作系统仍然存在一定的差异。os目录中包含了各个操作系统中所特有的内容。

docs目录中包含了Apache提供的文档。

test目录中包含了很多APR库实用的测试函数,对于APR初学者来说,这个目录具有很好的参考价值。对于大部分APR API,目录中都给出了使用示例。