得益於nginx的模組化設計,用nginx做模組化開發很方便,但也帶來了程式碼複雜,難以讀懂的問題,首先來看看http模組是怎麼準備的,真正處理http請求的函式(或是handler,句柄)是ngx_http_wait_request_handler。
rev->handler = ngx_http_wait_request_handler;
以這個函數為例,我們來看看http模組是怎麼將這個handler掛載好的,如下圖
ngx_http_block ()則就是一個典型的nginx中的module函數了,當整個模組載入的時候就會呼叫這個函數
掛好了handler,什麼時候去呼叫這個handler呢?
這就要靠nginx的event模組了,event模組實現的功能就是將用來accept的fd註冊到epoll中,等有client的請求到來,產生一個新的connfd,然後從連接池裡拿出一個連接,將這個連接初始化(也就是把剛剛我們的讀寫事件的回調等東西寫進連接中),然後一併註冊到epoll中去,這樣,只要這個connfd就緒,就可以根據fd的讀寫狀態呼叫其對應讀寫事件的handler了。
來看下event模組是怎麼初始化然後監聽用來accept_fd的:
以上是nginx安裝後怎麼開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!