nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值