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

首頁 > 網站 > Nginx > 正文

nginx處理http請求實例詳解

2024-08-30 12:22:03
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了nginx處理http請求實例詳解的相關資料,需要的朋友可以參考下

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

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

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

//接收到http請求行與請求頭后,http的處理流程,是第一個http處理請求的讀事件回調 //這個函數執(zhí)行后,將把讀寫事件的回調設置為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請求對象的讀事件回調,與上面的連接對應的讀事件回調有什么關系呢?   //當讀事件發(fā)生后,連接對應的讀事件回調ngx_http_request_handler會被調用,   //在這個回調內會調用http請求對象的讀事件回調ngx_http_block_reading,而這個回調是   //不會做任何事件的,因此相當于忽略了讀事件。因為已經接收完了請求行請求頭,現(xiàn)在要做的是調用各個http模塊,   //對接收到的請求行請求頭進行處理   r->read_event_handler = ngx_http_block_reading;    //調用各個http模塊協(xié)同處理這個請求   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請求對象的讀寫事件回調有什么關系呢?

//http請求處理讀與寫事件的回調,在ngx_http_process_request函數中設置。 //這個函數中將會調用http請求對象的讀寫事件回調。將event事件模塊與http框架關聯(lián)起來 static void ngx_http_request_handler(ngx_event_t *ev) {   //如果同時發(fā)生讀寫事件,則只有寫事件才會觸發(fā)。寫事件優(yōu)先級更高   if (ev->write)    {     r->write_event_handler(r);  //在函數ngx_http_handler設置為:ngx_http_core_run_phases    }   else   {     r->read_event_handler(r);  //在函數ngx_http_process_request設置為:ngx_http_block_reading   }    //處理子請求   ngx_http_run_posted_requests(c); } 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 定陶县| 玉龙| 凤台县| 光山县| 泾源县| 闵行区| 射洪县| 郎溪县| 仁化县| 都安| 磐安县| 丹巴县| 涿鹿县| 建昌县| 灌南县| 壶关县| 宿州市| 绥化市| 梅河口市| 西吉县| 钟祥市| 饶河县| 尉犁县| 资兴市| 普陀区| 远安县| 莫力| 辽阳市| 高淳县| 大庆市| 文成县| 湖北省| 泸定县| 玉林市| 宜宾市| 克东县| 延津县| 内丘县| 兰考县| 大姚县| 霍山县|