nginx源码分析(1)——启动过程--todo

from http://blog.csdn.net/chosen0ne/article/details/7728294
1. 重要的数据结构
1. ngx_module_t
nginx中所有模块的类型都是ngx_module_t类型的,定义了模块的一些属性。nginx是完全模块化的,所有的组件都是模块,从而实现了nginx的高度松耦合。同时,我们在进行nginx模块开发时,也离不开这个数据结构。
[cpp] view plain copy print?
struct ngx_module_s {
/**
* 在具体类型模块(http、event等)的全局配置结构数组的下标。以http module模块为例,
* nginx把所有的http module的config信息存放在ngx_http_conf_ctx_t类型的变量中,
* 这个变量只有3个属性,分别是所有http module的main、srv、loc的config信息的数组。
* 如果该模块是http module,则ctx_index是该模块的config信息(main、srv、loc)
* 在ngx_http_conf_ctx_t中的下标。
*/
ngx_uint_t ctx_index;

/** 
 * nginx把所有模块(ngx_module_t)存放到ngx_modules数组中,这个数组在nginx源码路 
 * 径的objs/ngx_modules.c中,是在运行configure脚本后生成的。index属性就是该模块 
 * 在ngx_modules数组中的下标。同时nginx把所有的core module的配置结构存放到ngx_cycle的 
 * conf_ctx数组中,index也是该模块的配置结构在ngx_cycle->conf_ctx数组中的下标。 
 */  
ngx_uint_t            index;  

……  

/** 
 * 模块的上下文属性,同一类型的模块的属性是相同的,比如core module的ctx是ngx_core_module_t类型。 
 * 而http module的ctx是ngx_http_moduel_t类型,event module的ctx是ngx_event_module_t类型等等。 
 * 相应类型的模块由分开处理的,比如所有的http module由ngx_http_module解析处理,而所有的event module 
 * 由ngx_events_module解析处理。 
 */  
void                 *ctx;  

/** 
 * 该模块支持的指令的数组,最后以一个空指令结尾。ngx_commond_t的分析见下文。 
 */  
ngx_command_t        *commands;  

/** 
 * 模块的类型,nginx所有的模块类型: 
 *      NGX_CORE_MODULE 
 *      NGX_CONF_MODULE 
 *      NGX_HTTP_MODULE 
 *      NGX_EVENT_MODULE 
 *      NGX_MAIL_MODULE 
 * 这些不同的类型也指定了不同的ctx。 
 */  
ngx_uint_t            type;  

/* 接下来都是一些回调函数,在nginx初始化过程的特定时间点调用 */  
ngx_int_t           (*init_master)(ngx_log_t *log);  

/* 初始化完所有模块后调用,在ngx_int_cycle函数(ngx_cycle.c)中 */  
ngx_int_t           (*init_module)(ngx_cycle_t *cycle);  

/* 初始化完worker进程后调用,在ngx_worker_process_init函数(ngx_process_cycle.c)中 */  
ngx_int_t           (*init_process)(ngx_cycle_t *cycle);  
ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);  
void                (*exit_thread)(ngx_cycle_t *cycle);  
void                (*exit_process)(ngx_cycle_t *cycle);  

void                (*exit_master)(ngx_cycle_t *cycle);  
……  

};
下面的表格是type与ctx的对应关系:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值