apache伺服器本質上說是一個TCP socket服務,socket模型如下: 下面以worker MPM來說明apache代碼中相應處理的位置在哪裡: (以apache httpd 2.2.23版本的代碼為基礎) 1) 在第一次啟動時驗證配置沒有異常時,建立了socket。 2) open_logs 挂鈎調用了 ap_setup_listeners() ,最終在listen.c的make_socket方法執行了apr_socket_bind/apr_socket_listen,進入通信的環節。 3) worker.c的監聽線程中負責接受請求,然後利用ap_queue_push把相應的請求放入隊列中。下面是接受請求accept_func的調用棧。 4)請求/響應的處理。 請求的處理是通過handler來實作,如果是讀取伺服器上的靜态頁面,則由default_handler來處理。同時響應的内容需要通過filter修改之後,最終發送header和body。下面是發送header的調用棧。 暫時寫到這裡,以後再繼續分析。