直接跟** :
main ->
ngx_preinit_modules(對模組名進行複製) ->
ngx_init_cycle(講模組物件複製到cycle裡面) -> ngx_cycle_modules
ngx_master_process_cycle ->
ngx_start_worker_processes ->
ngx_worker_process_cycle ->
ngx_worker_process_init ->
cycle->modules[i]->init_process(cycle) (每個work程序中初始化這些模組)
1、ngx_preinit_modules
初始化所有模組,並對模組進行編號
ngx_int_ ngx_preinit_modules(void)
ngx_modules_n = i;
ngx_max_module = ngx_modules_n + ngx_max_dynamic_modules;
return ngx_ok;
}ngx_module_names分析 :
定義在ngx_module.h中
extern char *ngx_module_names; //乙個外部定義
生成原理 :
1. 具體的模組
可通過編譯前的
configure
命令進行配置,即設定哪些模組需要編譯,哪些不被編譯
。當編譯的時候,會生成ngx_modules.c的檔案,裡面就包含模組陣列。
2. 新增模組或者減少模組可以在
configure
命令執行前
auto/modules檔案裡面修改。
生成的objs/ngx_modules.c檔案如下:
2、ngx_init_cycle(講模組物件複製到cycle裡面) -> ngx_cycle_modules
初始化cycle,並初始化模組
ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle)
//在work程序初始化中, 會呼叫
cycle->modules模組的初始化函式
ngx_memcpy(cycle->modules, ngx_modules,
ngx_modules_n * sizeof(ngx_module_t *));
cycle->modules_n = ngx_modules_n;
return ngx_ok;
}3、work程序中init_process模組
ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)}}
}
nginx 原始碼分析
近期準備研究一下nginx原始碼,此處記錄一下。計畫 1 了解evan miller 的文章 2 了解nginx的組織架構 3 了解nginx的基本資料結構 4 熟悉nginx的主要module及執行機制,主要是core http event os 5 簡單的module開發及測試 一 準備 為了方...
nginx原始碼分析 從原始碼看nginx框架總結
nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...
Nginx原始碼閱讀(模組)
每個nginx模組,都是乙個ngx module t型別的變數。根據ngx module t的type,所有nginx模組可以分為5種型別 type ctx指向的資料結構 commands指向的資料結構 具體模組 ngx event core module等 ngx http core module...