国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

nginx處理http請求實例詳解

2024-08-30 12:25:31
字體:
來源:轉載
供稿:網友

     本文在這基礎上分析nginx服務器收到http請求行、請求頭部后,http框架是如何調度各個http模塊共同完成這個http請求。例如: http框架調度靜態模塊,獲取服務器目錄下的某個html頁面返回給客戶端; 或者http框架調度access權限訪問模塊,判斷這個客戶端是否有權限訪問服務器。

一、event事件與http框架的交互

        在接收完http請求行、http請求頭部后,會調用ngx_http_process_request這個函數開始處理http請求。因為一個http請求由11個處理階段組成,而每一個處理階段都允許多個http模塊介入,因此在這個函數中,將調度各個階段的http模塊共同完成這個請求。

//接收到http請求行與請求頭后,http的處理流程,是第一個http處理請求的讀事件回調 //這個函數執行后,將把讀寫事件的回調設置為ngx_http_request_handler。這樣下次再有事件時 //將調用ngx_http_request_handler函數來處理,而不會再調用ngx_http_process_request了 static void ngx_http_process_request(ngx_http_request_t *r) {   ngx_connection_t *c;   c = r->connection;   //因為已經接收完http請求行、請求頭部了,準備調用各個http模塊處理請求了。   //因此需要接收任何來自客戶端的讀事件,也就不存在接收http請求頭部超時問題   if (c->read->timer_set)    {     ngx_del_timer(c->read);   }   //重新設置當前連接的讀寫事件回調   c->read->handler = ngx_http_request_handler;   c->write->handler = ngx_http_request_handler;   //設置http請求對象的讀事件回調,這個回調不做任何的事情。   //那http請求對象的讀事件回調,與上面的連接對應的讀事件回調有什么關系呢?   //當讀事件發生后,連接對應的讀事件回調ngx_http_request_handler會被調用,   //在這個回調內會調用http請求對象的讀事件回調ngx_http_block_reading,而這個回調是   //不會做任何事件的,因此相當于忽略了讀事件。因為已經接收完了請求行請求頭,現在要做的是調用各個http模塊,   //對接收到的請求行請求頭進行處理   r->read_event_handler = ngx_http_block_reading;    //調用各個http模塊協同處理這個請求   ngx_http_handler(r);   //處理子請求   ngx_http_run_posted_requests(c); }

      ngx_http_process_request函數只會被調用一次。如果一次調度并不能處理完11個http階段,那會將連接對象對應的讀事件、寫事件回調設置為ngx_http_request_handler。而請求對象的讀事件設置為ngx_http_block_reading, 請求對象的寫事件回調設置為ngx_http_core_run_phases, 這個回調在ngx_http_handler內設置。這樣在事件再次到來時不會調用

ngx_http_process_request函數處理了。那event事件模塊的讀寫事件回調與http請求對象的讀寫事件回調有什么關系呢?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜鼓县| 阿尔山市| 邮箱| 上栗县| 杭锦后旗| 长垣县| 香港 | 都江堰市| 鲜城| 肃宁县| 汶川县| 上虞市| 陆川县| 巴中市| 南开区| 额尔古纳市| 明光市| 博爱县| 邯郸市| 乃东县| 孟州市| 筠连县| 大丰市| 黄浦区| 德江县| 泊头市| 潢川县| 康马县| 朔州市| 共和县| 平顶山市| 清涧县| 鹿泉市| 离岛区| 太谷县| 年辖:市辖区| 政和县| 布尔津县| 定安县| 孟州市| 合山市|