CGI,FASTCGI,PHP-CGI,PHP-FPM 概念
CGI(Common Gateway InterFace)
既然webserver想把這個請求交給可以處理的人來做,是不是該告訴人家一些基本的,並且人家看得懂的資訊資訊?
Webserver會傳那些基本資訊給後端處理請求的解析器呢?url,get請求的query_string,POST資料,Http Header等,那麼CGI就規定了要傳哪些引數,以及以一個什麼樣的格式傳過去,後端處理完這個請求,又該以什麼樣的格式傳回。
概念:CGI(Common Gateway Interface)全稱是“通用閘道器介面”,WEB 伺服器與PHP應用進行“交談”的一種工具,其程式須執行在網路伺服器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。也就是說,CGI用來在web伺服器與後端實現了CGI協議的程式之間提供一個溝通的橋樑,降低兩者之間的耦合性。
缺陷:採用了效率低下的”FE”模式,就是Fork-And-Execute,每個web請求進來之後,都會啟動一個php程式,處理完請求後退出,浪費資源,高請求數下,伺服器宕機。
FastCGI
有沒有效率更高的解決辦法呢,可以不可一完事先別走呢?
這就衍生出了FastCGI,也可以理解為一種協議,在CGI協議上進行強化,從原來的”FE”模式進化為”LL”模式,即Long-Live模式,執行完畢之後,常駐記憶體。同樣,它也是語言無關性的,只要你具有標準輸入輸出和環境變數,那麼就OK。
FastCGI會先啟動一個Master程序,Master讀取和處理基礎的配置檔案,初始化環境,之後依據配置生成多個worker程序來處理請求。並且可以動態調整worker的數量。
PHP-CGI
Fast-cgi聽起來很不錯,有沒人用用它的呀?php-cgi是實現FastCGI協議的php直譯器。
缺陷:
更改php.ini配置後需要重啟php-cgi程序,且會殺死正在執行的程序。
單程序,不具備程序管理能力,效率很低。
PHP-FPM
概念:一個實現FastCGI多程序(程序池)管理的管理器。開啟之後,會看到多個php-cgi程序,它們都由php-fpm管理。
一些進步:
修改配置後,平滑過渡,新的worker程序使用新的配置,正在執行的worker程序處理完當前請求後自動shutdown。多程序的效率比單程序更高。
轉載來源: http://lib.csdn.net/article/p...