ngx_cycle_s

本文深入探讨了ngx_cycle_s结构体在nginx中的作用,详细解析了其支持的主耍方法,帮助读者掌握nginx核心组件的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ngx_cycle_s

ngx_cycle_s结构体

typedef ngx_cycle_s ngx_cycle_t;

struct ngx_cycle_s {
    /* 保存着所有模块存储配置项的结构体指针,它首先是一个数组,每个数组成员又是一个指针,
    这个指针指向另一个存储着指针的数组 */
    void                  ****conf_ctx;
    //内存池
    ngx_pool_t               *pool;

    /* 日志模块中提供生成计本ngx_log_t日志对象的功能,这里的log是还没有解析配置前,重定向到屏幕的。
    在ngx_init_cycle函数执行后,会更需nginx.conf中的配置项重新构造出log */
    ngx_log_t                *log;
    /* new_log暂时存储根据nginx.conf生成的新log,之后会赋值给上述log */
    ngx_log_t                 new_log;

    ngx_uint_t                log_use_stderr;  /* unsigned  log_use_stderr:1; */

    /* 对于poll、rtsig这样的事件模块,会以有效文件句柄来预先建立ngx_connection_t结构体,以加速事件
    的收集和分发。这时,files就会保存所有ngx_connection_t的指针组成的数组。 */
    ngx_connection_t        **files;
    //可用连接池
    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所有要操作的目录
    ngx_array_t               paths;
    //ngx_open_file_t结构体组成的数组,表示Nginx已经打开的所有文件。由模块添加,ngx_init_cycle中打开
    ngx_list_t                open_files;
    //ngx_shm_zone_t组成的数组,每个元素表示一块共享内存
    ngx_list_t                shared_memory;

    //当前进程中所有连接对象的总数
    ngx_uint_t                connection_n;
    //上述files中存在的有效文件句柄个数
    ngx_uint_t                files_n;

    //指向当前进程中的所有连接对象
    ngx_connection_t         *connections;
    //指向当前进程中的所有读事件对象
    ngx_event_t              *read_events;
    //指向当前进程中所有写事件对象
    ngx_event_t              *write_events;

    //用于引用上一个ngx_cycle_t对象
    ngx_cycle_t              *old_cycle;

    //配置文件相对于安装目录的路径名称
    ngx_str_t                 conf_file;
    //处理配置文件时需要特殊处理的命令行携带参数
    ngx_str_t                 conf_param;
    //配置文件所在目录的路径
    ngx_str_t                 conf_prefix;
    //Nginx安装目录的路径
    ngx_str_t                 prefix;
    //用于进程间同步文件锁名称
    ngx_str_t                 lock_file;
    //gethostname得到的主机名
    ngx_str_t                 hostname;
};

ngx_cycle_s结构体支持的主要方法

函数名参数含义执行意义
ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)old_cycle表示临时的ngx_cycle_t指针,一般仅用来传递ngx_cycle_t结构体中的配置文件路径等返回初始化成功的完整的ngx_cycle_t结构体
ngx_int_t ngx_process_options(ngx_cycle_t *cycle)cycle通常是刚刚分配的ngx_cycle_t结构体指针用运行Nginx可能携带的目录参数来初始化cycle
ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle)同上通过该函数来使用已经打开的TCP监听端口
ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle)同上监听、绑定cycle中的listening动态数组指定的相应端口
void ngx_configure_listening_sockets(ngx_cycle_t *cycle)同上根据nginx.conf中的配置项设置已经监听的句柄
void ngx_close_listening_sockets(ngx_cycle_t *cycle)同上关闭cycle的listening中的套接字
void ngx_master_process_cycle(ngx_cycle_t *cycle)同上进入master进程的工作循环
void ngx_single_process_cycle(ngx_cycle_t *cycle)同上进入单进程(非master、worker进程工作模式的工作循环
void ngx_start_cache_manager_processes(ngx_cycle_t *cycle,ngx_channel_t *ch)同上,ch是将要向子进程发送的信息向所有已经打开的channel(通过socketpair生成的句柄进行通信)发送ch信息
void ngx_signal_worker_processes(ngx_cycle_t *cycle,int signo)同上,signo是信号处理worker进程接收到的信号
ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle)同上检查master进程的所有子进程,根据每个子进程的状态判断是否要启动子进程
void ngx_master_process_exit(ngx_cycle_t *t)同上退出master工作循环
void ngx_worker_process_cycle(ngx_cycle_t *cycle,void *data)同上进入worker工作循环
void ngx_worker_process_init(ngx_cycle_t *cycle,ngx_uint_t priority)同上,priority是worker进程的系统优先级进入worker进程工作循环之前的初始化工作
void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle,void *data)同上,data是传入ngx_cache_manager_ctx_t结构体的指针执行缓存管理工作的循环方法
void ngx_worker_process_exit(ngx_cycle_t *cycle)同上退出worker进程工作循环
void ngx_process_events_and_timers(ngx_cycle_t *cycle)同上使用事件模块处理截止到目前已收到的事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值