ngx_cycle_s

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) 同上 使用事件模塊處理截止到目前已收到的事件
發佈了88 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章