标签:
通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API。虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统。(转载请指明出于breaksoftware的csdn博客)
为了实现最基础的URL解析等功能,我把《Apache模块开发指南》一书粗略了翻看了两遍,以利于迅速了解Apache模块编程的相关知识。至于书中具体的知识点,我并不在此赘述。但是为了便于大家了解之后遇到的各种相关的知识点,我大致罗列几条(摘自《Apache模块开发指南》一书):
其中http_头文件又有如下重要的头文件:
我们在前一文《服务器架设笔记——编译Apache及其插件》中我们提到APR库,其全称是Apache Portable Runtime,即Apache可移植运行时库。还有个叫APR-UTIL库,顾名思义,其应该是基于APR库的封装,提供了一套易于使用APR库的方法。我们之后的编程中,将会经常使用到这些库。限于篇幅,我并不打算在此细细讲解这些库。我也只是罗列下《Apache模块开发指南》中的一些知识,相信大家会在其中找到对自己有用的模块。
名称 | 用途 |
---|---|
apr_allocator | 内存分配,内部使用 |
apr_atomic | 原子操作 |
apr_dso | 动态加载链接库 |
apr_env | 读取/设置环境变量 |
apr_errno | 定义错误的值、条件和宏 |
apr_file_info | 文件系统对象和路径的属性 |
apr_file_io | 文件系统输入/输出 |
apr_global_mutex | 全局锁 |
apr_hash | 哈希表 |
apr_inherit | 文件句柄继承辅助 |
apr_mmap | 内存映射 |
apr_network_io | 网络输入/输出(套接字) |
apr_proc_mutex | 进程锁 |
apr_random | 随机数 |
apr_shm | 共享内存 |
apr_signal | 信号处理 |
apr_strings | 字符串操作 |
apr_tables | 表格和数组函数 |
apr_thread_cond | 线程条件 |
apr_thread_mutex | 线程锁 |
apr_thread_proc | 线程和进程函数 |
apr_thread_rwlock | 读写锁 |
apr_time | 时间/日期函数 |
apr_usr | 用户和组ID服务 |
可以见得,APR库主要是对系统的相关操作做了封装,从而实现Portable的能力。
我们再看下APR-UTIL库部分模块(摘自《Apache模块开发指南》一书):
名称 | 用途 |
---|---|
apr_anylock | 透明的、任何锁的封装 |
apr_base64 | Base64编码 |
apr_date | 时间字符串解析 |
apr_dbd | 针对SQL数据库的常用API |
apr_hooks | 钩子实现宏 |
apr_md4 | MD4编码 |
apr_md5 | MD5编码 |
apr_queue | 线程安全的FIFO队列 |
apr_sha1 | SHA1编码 |
apr_strmatch | 字符串模式匹配 |
apr_uri | URI解析/构造 |
apr_uuid | 用户标识 |
apr_xlate | 字符集转换(I18N) |
apr_xml | XML解析 |
我们发现APR和APR-UTIL库为我们提供了从内存分配到线程控制等操作系统相关的模块,也为我们提供了字符串和XML以及一些简单的编码算法库。这些模块可以满足我们一般的需求,我们只要将这些API组合好,使用对,便可以编写Apache插件了。
最后我们要介绍的是APR库的一个基础组件——APR pool。pool就是池,我们在以往的编程中经常会接触到线程池、内存池这样的概念。而APR pool就是APR中各种资源管理的池。作为C/C++程序员,在编程中我们往往需要处理各种内存分配和释放问题——不讨论智能指针这类知识。如果没有深厚的功底和清晰的逻辑,内存泄露就是家常便饭。APR池就是要将程序员这种纠结中解脱出来。所以我们之后在Apache模块编程中,一旦涉及资源申请,就要优先考虑如何去使用这个池。
有了以上的基础知识,我们便可以再小迈一步。下节我将介绍如何编写一个http请求解析插件。
标签:
原文地址:http://blog.csdn.net/breaksoftware/article/details/43851595