nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)
来源:互联网 发布:大嘴猴天鹅绒知乎 编辑:程序博客网 时间:2024/06/06 12:47
Nginx框架是围绕着ngx_cycle_t结构体来控制进程运行的。ngx_cycle_t结构体的prefix、conf_prefix、conf_file等字符串类型成员保存着Nginx配置文件的路径。Nginx在程序运行的时候会使用ngx_init_cycle方法来根据nginx.conf加载模块。
ngx_cycle_t结构体定义:
struct ngx_cycle_s { void ****conf_ctx; /* 保存着所有模块存储配置项的结构体的指针,它首先是一个数组,每个数组成员又是一个指针, 这个指针指向另一个存储着指针的数组 */ ngx_pool_t *pool; /* 内存池 */ ngx_log_t *log; ngx_log_t new_log; /* 日志模块中提供了生成基本ngx_log_t日志对象的功能, 这里的log实际上是在还没有执行ngx_init_cycle方法前,如果有信息需要输出到日志, 就会暂时使用log对象,它会输出到屏幕。 * 在ngx_init_cycle方法执行后,将会根据nginx.conf配置文件中的配置项,构造出正确的日志文件, 此时会对log重新赋值(用new_log的地址覆盖上面的log指针) */ ngx_uint_t log_use_stderr; /* unsigned log_use_stderr:1; */ ngx_uint_t files_n; ngx_connection_t **files; /* 对于poll、rtsig这样的事件模块,会以有效文件句柄数来预先建立这些ngx_connection_t结构体, 以加速事件的收集、分发。这时files就会保存所有ngx_connection_t的指针组成的数组,files_n是指针的总数。*/ ngx_connection_t *free_connections; ngx_uint_t free_connection_n; /* 空闲连接池,与free_connection_n配合使用 */ ngx_queue_t reusable_connections_queue; /* 可重复使用的双向连接队列,成员类型是ngx_connection_t */ ngx_array_t listening; /* 动态数组,表示监听端口及相关参数 */ ngx_array_t paths; /* 保存Nginx要操作的所有目录,如果目录不存在,则会试图创建,而创建目录失败将导致Nginx启动失败。*/ ngx_list_t open_files; /* 保存Nginx已经打开的所有文件,类型是ngx_open_file_t,Nginx不会主动添加文件,这是给模块自己用的, 如果需要的话,模块向其中添加文件路径名,Nginx框架会在ngx_init_cycle方法中打开这些文件 */ ngx_list_t shared_memory; /* 单链表存储ngx_shm_zone_t,每个元素表示一块共享内存。*/ ngx_uint_t connection_n; ngx_connection_t *connections; ngx_event_t *read_events; ngx_event_t *write_events; /* 表示当前进程中所有的连接对象和它们的读写事件,connection_n是它们的数量 */ ngx_cycle_t *old_cycle; /* 旧的ngx_cycle_t对象用于引用上一个ngx_cycle_t对象中的成员,例如ngx_init_cycle方法, 在启动初期,需要建立一个临时的ngx_cycle_t对象保存一些变量,在调用ngx_init_cycle方法时, 就可以把旧的ngx_cycle_t的对象传进去,而这时old_clcle对象就会保存这个前期的ngx_clcle_t对象。*/ ngx_str_t conf_file; /* 配置文件相对于安装目录的路径名 */ ngx_str_t conf_param; /* nginx处理配置文件时需要特殊处理的在命令行携带的参数,一般是-g选项携带的参数 */ ngx_str_t conf_prefix; ngx_str_t prefix; /* Nginx配置文件所在目录的路径和安装目录的路径 */ ngx_str_t lock_file; /* 用于进程间同步的文件锁名称 */ ngx_str_t hostname; /* 使用gethostname系统调用得到的主机名 */};
0 0
- nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)
- nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)
- nginx源码初读(2)--让烦恼从数据结构开始(ngx_buf/ngx_chain)
- nginx源码初读(3)--让烦恼从数据结构开始(ngx_pool)
- nginx源码初读(4)--让烦恼从数据结构开始(ngx_str)
- nginx源码初读(5)--让烦恼从数据结构开始(ngx_array)
- nginx源码初读(6)--让烦恼从数据结构开始(ngx_list)
- nginx源码初读(7)--让烦恼从数据结构开始(ngx_queue)
- nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)
- nginx源码初读(9)--让烦恼从数据结构开始(ngx_listening/ngx_connection)
- nginx源码初读(11)--让烦恼从数据结构开始(ngx_command/ngx_module/ngx_conf)
- nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)
- nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)
- nginx的核心数据结构ngx_cycle
- nginx 源码学习笔记(十四)—— 全局变量ngx_cycle
- nginx 源码学习笔记(十四)—— 全局变量ngx_cycle
- nginx源码分析—全局变量ngx_cycle的初始化
- nginx源码分析—全局变量ngx_cycle的初始化
- 新型PID控制及其应用
- python 示例:解释__name__ = "__main__"
- 手机淘宝
- 织梦如何去掉首页的后缀
- URL传递参数长度限制
- nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)
- linux set ff unix
- leetcode-7-Reverse Integer
- Block使用介绍(-)
- android开发环境搭建(Studio版)
- linux下释放cache内存
- iOS就九宫格实现
- 大数问题
- python print