//我们来看一看这神奇的ngx_cycle_s结构体吧,看一看庐山真面目.
struct ngx_cycle_s {
/* 保存着所有模块配置项的结构体指针p,它首先是一个数组,
该数组每个成员又是一个指针,这个指针又指向了存储着指针的数组.*/
void **** conf_ctx ;
//内存池
ngx_pool_t * pool ;
/*日志模块中提供了生成基本ngx_log_t日志对象的功能,
这里的log实际上是在在没有执行ngx_init_cycle方法前,
也就是还没有解析配置项前,如果有信息需要输出到日志,
就会暂时使用log对象,它会输出到屏幕.在执行ngx_init_cycle方法后,
会根据nginx.conf配置文件中的配置项,构造出正确的日志文件,
此时会对log重新赋值. */
ngx_log_t * log ;
/* 由nginx.conf配置文件读取到日志路径后,将开始初始化error_log日志文件,
由于log对象还在用于输出日志到屏幕,这时候new_log将暂时替代log,
待初始化成功后,会用new_log的地址覆盖上面的指针.*/
ngx_log_t new_log ;
//下面files数组里元素的总数
ngx_uint_t files_n ;
/*
对于epoll,rtsig这样的事件模块,会以有效文件句柄树来预先建立
这些ngx_connection_t结构体,以加速事件的收集,分发.这时files就会
保存所有ngx_connection_t的指针组成的数组,而文件句柄的值用来访问
files数组成员. */
ngx_connection_t ** files ;
//可用连接池,与free_connection_n配合使用
ngx_connection_t * free_connections ;
//连接池的个数
ngx_uint_t free_connection_n ;
//可重用的连接队列
ngx_queue_t reusable_connections_queue ;
//动态数组,每个成员存储ngx_listening_t成员,表示监听端口以及相关的参数
ngx_array_t listening ;
/* 动态数组,保存着nginx所有要操作的目录,如果目录不在,将创建,
如果创建失败(例如权限不够),nginx将启动失败.*/
ngx_array_t paths ;
/* 单链表容器,元素类型是ngx_open_file_t结构体,他表示nginx已经打开的
所有文件.事实上nginx框架不会向open_files链表中添加文件,
而是由对此感兴趣的模块向其中添加文件路径名,
nginx会在ngx_init_cycle方法中打开这些文件.*/
ngx_list_t open_files ;
/* 单链表容器,每一个元素表示一块共享内存*/
ngx_list_t shared_memory ;
//当前进程中所有连接对象的总数,于下面的connections成员配合使用.
ngx_uint_t connection_n ;
//指向当前进程中多有连接对象
ngx_connection_t * connections ;
//指向当前进程中所有读事件
ngx_event_t * read_events ;
//指向当前进程中所有写事件
ngx_event_t * write_events ;
/* 旧的ngx_cycle_t对象,用于引用上一个ngx_cycle_t对象中的成员.
例如 ngx_init_cycle方法在启动初期,需要建立一个临时ngx_cycle_t
对象来保存一些变量,再调用ngx_init_cycle方法时,就可以把
旧的ngx_cycle_t对象传进去,而这时,这个old_cycle指针
就会保存这个前期的ngx_cycle_t对象 */
ngx_cycle_t * old_cycle ;
//配置文件相对于安装目录的路径
ngx_str_t conf_file ;
/* nginx处理配置文件时需要特殊处理的在命令行携带的参数,
一般是 -g选项携带的参数 */
ngx_str_t conf_param ;
//nginx配置文件路径
ngx_str_t conf_prefix ;
//nginx安装路径
ngx_str_t prefix ;
//用于进程间同步的文件所名称
ngx_str_t lock_file ;
//使用gethostname系统调用得到的主机名
ngx_str_t hostname ;
};
nginx : ngx_cycle_t结构体
最新推荐文章于 2022-06-12 23:40:52 发布