本节主要讲述一下nginx module的实现。
1. 相关函数声明及变量定义
上面声明了两个静态函数:
接着定义了两个变量:
2. 函数ngx_preinit_modules()
本函数用于预先初始化全局ngx_modules
数组元素对应的index以及name, 并统计当前静态编译的模块个数,算出允许的最大模块数。
3. 函数ngx_cycle_modules()
此函数初始化指定cycle
的modules变量。
4. 函数ngx_init_modules()
此函数在cycle
初始化的后期,即在配置文件处理完成、socket已经建立、共享内存已经建立后调用本函数初始化module。
5. 函数ngx_count_modules()
这里我们首先讲述一下nginx的cycle
回滚(rollback): 在nginx调用ngx_init_cycle()出现较为严重的错误而失败时,会回滚到前一个已经初始化过的old_cycle状态, 这样保证系统仍能够正常的运行。接下来我们简要介绍一下本函数的实现:
6. 函数ngx_add_module()
本函数用于处理load_module
指令, 添加一个动态模块。下面我们简要分析一下本函数:
7: 函数ngx_module_index()
本函数较为简单,从cycle->modules
以及cycle->old_cycle->modules
数组中挑选出一个最小的未被使用的Index。这里之所以还要在cycle->old_cycle->modules
未被使用,主要是因为用到了一些与modules相关的全局变量。
8. 函数ngx_module_ctx_index()
本函数较为简单,从cycle->modules
以及cycle->old_cycle->modules
数组中挑选出一个最小的未被使用的ctx_index。这里之所以还要在cycle->old_cycle->modules
未被使用,主要是因为用到了一些与modules相关的全局变量。
[参看]
- nginx-module-t数据结构