[TOC]
## 1、webserver處理動態文件的方式
* 模塊化即把處理動態文件的引擎當成模塊集成進webserver中
* CGI通信協議
## 2、實現方式
### 2.1、模塊化

a、過程描述:
* 客戶端發起動態文件請求
* webserver接收到請求,根據其配置文件的內容,交由至對應的動態模塊處理
b、要點:
把動態處理模塊當成是webserver的一個子模塊。
### 2.2、CGI
通用網關接口(Common Gateway Interface/CGI)是一種重要的互聯網技術,可以讓一個客戶端,從網頁瀏覽器向執行在網絡服務器上的程序請求數據。CGI描述了服務器和請求處理程序之間傳輸數據的一種標準。

a、過程描述:
* 客戶端發起動態文件請求
* webserver接收到請求,交由至對應的CGI處理
* CGI創建子進程,由其處理該請求內容,并等待結果返回。
b、要點:
CGI這種每次調用都需要創建子進程的方式。一來是創建子進程的開銷昂貴,二來是經不起大并發量。
### 2.3、fastCGI
它是 CGI 的增強版本,采用master-worker的方式,改進了CGI中(fork-execute-exit)的詬病,用于減少 Server 與 CGI 應用之間的交互開銷,從而使 Server 可以同時處理更多的請求。

a、過程描述:
* fastcgi啟動,根據其配置文件,創建一個master和n個worker進程,開始監聽并等待請求
* 客戶端發起動態文件請求
* webserver接收到請求,根據配置文件,通過socket轉發至對應的fastcgi請求,并等待結果返回
b、要點:
* 通過socket通信方式,連接了 webserver和fastcgi。
* 其次,fastcgi先創建工作進程的方式,避免了CGI(fork-execute-exit)的詬病。并根據采用master和worker的方式,master 進程只有一個,負責監聽端口,接收來自 Web Server 的請求,而 worker 進程則一般有多個(具體數量根據實際需要配置),每個進程內部都嵌入了一個 PHP 解釋器,是 PHP 代碼真正執行的地方
## 3、協議實現
### 3.1、php-cgi
php-cgi是php的解釋器,是cgi協議的實現
### 3.2、php-fpm
php-fpm是管理和實現fastCGI的管理器