1. 程式人生 > >nginx的所有模組如何起來的-函式呼叫順序

nginx的所有模組如何起來的-函式呼叫順序

http://bollaxu.iteye.com/blog/855457

main函式中的ngx_init_cycle函式中流程

一、

先呼叫每個NGX_CORE_MODULE模組的create_conf函式建立存放配置檔案的結構體;

二、

ngx_conf_parse的ngx_conf_handler中即呼叫型別是NGX_CORE_MODULE或NGX_CONF_MODULE的所有模組的ngx_command_t定義的變數中的每個函式解析配置檔案:

{以ngx_http_module模組為例,是屬於NGX_CORE_MODULE型別的,因此當執行該模組的ngx_command_t中的函式時即呼叫ngx_http_block,而該函式中流程如下:

1、執行所有NGX_HTTP_MODULE模組的上行文中的create_main_conf  create_srv_conf   create_loc_conf  preconfiguration  ;

2、ngx_conf_parse的ngx_conf_handler中即呼叫所有型別是NGX_HTTP_MODULE或NGX_CONF_MODULE的ngx_command_t定義的變數中的每個函式

3、最後呼叫所有NGX_HTTP_MODULE型別模組的init_main_conf、merge_srv_conf、merge_loc_conf函式;

4、呼叫所有NGX_HTTP_MODULE

模組的postconfiguration函式

5、初始化不同階段的處理函式,因此可以在第四步時候postconfiguration函式中將使用者的處理函式設定給相應階段。

6、建立監聽套接字並設定監聽套接字的回撥函式。

}

三、

最後呼叫每個NGX_CORE_MODULE模組的init_conf儲存配置資訊;

四、

呼叫所有模組的init_module;

每個work程序的執行緒處理函式ngx_worker_process_cycle剛剛進去會執行ngx_worker_process_init
執行每個模組的init_process函式;處理函式退出時候執行ngx_worker_process_exit呼叫每個模組的

exit_process函式;

相關推薦

nginx所有模組如何起來的-函式呼叫順序

http://bollaxu.iteye.com/blog/855457 main函式中的ngx_init_cycle函式中流程: 一、 先呼叫每個NGX_CORE_MODULE模組的create_c

UIViewController函式呼叫順序

/*********** 0 執行1次而已 ******************/ + (void)load { NSLog(@" 0:%s", __func__); } /*********** 1 執行1次而已 ******************/ + (void)initialize {

python函式呼叫順序、高階函式、巢狀函式、閉包詳解

  一:函式呼叫順序:其他高階語言類似,Python 不允許在函式未宣告之前,對其進行引用或者呼叫錯誤示範: def foo(): print 'in the foo' bar() foo() 報錯: in the foo Traceback (most re

C++中,組合類,類的解構函式呼叫順序

// test4.cpp : 定義控制檯應用程式的入口點。 //    1.宣告一個CPU類,包含等級rank,頻率frequency,電壓voltage等屬性,有兩個共有函式 //    stop 和ran。 // &nbs

總結c++類的建構函式 拷貝建構函式 解構函式 賦值運算子過載的特點以及函式呼叫順序

對 c++類的建構函式 拷貝建構函式 解構函式 賦值運算子過載 相關知識的總結,並附上例子,希望對大家有幫助,有錯誤大家可以指出來  一 建構函式    1 建構函式: 建構函式時一個特殊的成員函式,用來初始化物件的資料成員,在物件建立時,由編譯器自動呼叫,在物件的生命週期

C++中多繼承建構函式呼叫順序

class B1 {public: B1(int i) {cout<<"consB1"<<i<<endl;} };//定義基類B1 class B2 {public: B2(int j) {cout<<"consB2"<<

cocos2dx--兩個場景切換各函式呼叫順序

場景A切換到場景B,有切換特效 呼叫順序如下:(AAABABABA) A:建構函式 A:onEnter A:onEnterTransitionDidFinish B:建構函式 A:onExitTransitionDidStart B:onEnter A:onExit B:onEnterTra

Linux核心模組函式呼叫正確方法

模組之間發生呼叫關係是常有的事情,下面以兩個模組A、B,B使用A模組提供的函式為例,講解正確使用的方法。 模組A中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL將要提供給B模組的函式匯出; 模組B中用extern 宣告需要用到的A模組

C++虛繼承(九) --- 建構函式呼叫順序的實用之處

虛擬繼承是C++語言中一個非常重要但是又比較生僻的存在,它的定義非常簡單,但是對於理解C++的繼承機制卻是非常有用的。筆者最近學習過程中發現對C++的虛擬繼承不是很明朗,故在這裡對虛繼承做個小結。 首先說下遇到的問題吧。程式碼如下(程式碼來自於何海濤《程式設計師

C++多繼承建構函式呼叫順序

class B1 {public: B1(int i) {cout<<"consB1"<<i<<endl;} };//定義基類B1 class B2 {public: B2(int j) {cout<<"co

基類和派生類解構函式呼叫順序的輸出例子

class A { public: A() { } ~A() { cout<<"~A"<<endl; } }; class B:public A { public:

Android的Animation的onAnimationXXX/onAnimationXXX和Listener.onXXX回撥函式呼叫順序

    在做View的Animation的時候,我們通常需要在動畫的啟動和結束時,加一些控制。Android提供了兩種方式供我們使用    ◆過載View的onAnimationStart和onAnimationEnd     這兩個函式都沒有引數,代表的是當前的Anim

C++之派生類的建構函式和解構函式呼叫順序

派生類的建構函式只負責對派生類新增的成員進行初始化,對所有從基類繼承下來的成員,其初始化工作還是由基類的建構函式完成。 派生類的資料成員是由所有基類的資料成員與派生類新增的資料成員共同組成的。如果派生類新增資料成員中包括有內嵌的其他類物件,派生類的資料成員中實際上還間接包括

關於C++派生類中建構函式呼叫順序的問題

    近期在網上搜尋了一下關於C++派生類建構函式的呼叫問題,大部分博文給出的順序是: 1、基類構造 2、成員構造 3、派生構造。 這個順序嚴格來講是錯誤的,對新手極具誤導性!     依據侯捷翻譯的Stanley B. Lippman的<<深度探索C++

MFC建立,銷燬,開啟模式對話方塊,關閉模式對話方塊等函式呼叫順序

MFC應用程式建立視窗的過程1.PreCreateWindow()   該函式是一個過載函式,在視窗被建立前,可以在該過載函式中改變建立引數        (可以設定視窗風格等等)2.PreSubclassWindow() 這也是一個過載函式,允許首先子分類一個視窗3.OnG

C++ 建構函式初始化呼叫順序及類函式內部巢狀函式情況

C++建構函式初始化順序 C++建構函式按下列順序被呼叫:(1、2、3、4是按照優先順序順序來的!) (1)任何虛擬基類的建構函式按照它們被繼承的順序構造; (2)任何非虛擬基類的建構函式按照它們被繼承的順序構造; (3)任何成員物件的建構函式按照它們宣告的順序呼叫;(如果成員物件有前面出現

Nginx-Lua模組的執行順序

一、nginx執行步驟 nginx在處理每一個使用者請求時,都是按照若干個不同的階段依次處理的,與配置檔案上的順序沒有關係,詳細內容可以閱讀《深入理解nginx:模組開發與架構解析》這本書,這裡只做簡單介紹; 1、post-read     讀取請求內容階段,ngin

利用遞迴函式呼叫方式,將所輸入的5個字元,以相反順序打印出來

#include<stdio.h> int main() { void dg(char a[],int x); char a[5]; gets(a); dg(a,5); printf("\n"); return 0; } void dg(char a[5],in

深入解析Vue裡函式呼叫順序介紹

今天為大家分享一篇對vue裡函式的呼叫順序介紹,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。 method用來定義方法的,比如你@click=”test”,methods就定義test這個方法 created和ready都是 vue 元件的生命週期 c

spring中bean的建構函式,Autowired(Value)注入與@PostConstruct呼叫順序

最近在專案開發中遇到這樣一個需求,由於元資料在短時間內被客戶端多次讀取,因此希望直接將資料儲存到記憶體,以減少網路開銷,藉助guava cache於是有了下面這個類 /** * Created on 2018/10/18 */ @Component publ