workerman / 小談PHP中的幾種運行模式

咱們知道 workerman 程序須要在php-cli模式下運行,也就是命令行模式,這塊咱們有必要了解一下。

話說PHP當下一共有4種運行模式,分別是CGI、FastCGI、CLI和Web模塊模式。php

CGI

全稱是「通用網關接口」(Common Gateway Interface), 它可讓一個客戶端,從網頁瀏覽器向執行在Web服務器上的程序請求數據,描述的是客戶端和這個程序之間傳輸數據的一種標準,另外CGI獨立於任何語言,因此能夠用任何一種語言編寫,只要這種語言具備標準輸入、輸出和環境變量。如php,perl,tcl等。html

CGI針對每一個用戶請求都要開單獨的子進程去維護,因此數量多的時候會出現性能問題,最近幾年不多用。web

FastCGI

CGI的升級版本,FastCGI 像是一個常駐 (long-live) 型的 CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去解析php.ini、從新載入所有dll擴展並重初始化所有數據結構。數據庫

PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。apache

FastCGI工做原理api

  • Web Server啓動時載入FastCGI進程管理器;
  • FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程並等待來自Web Server的鏈接;
  • 當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
  • FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器的下一個鏈接。
  • 在正常的CGI模式中,這就結束了,下次還要從新來過。可是在FastCGI,全部這些都只在進程啓動時發生一次。一個額外的好處是,持續數據庫鏈接(Persistent database connection)能夠工做。

Cli

PHP-CLI是PHP Command Line Interface的簡稱,就是PHP在命令行運行的接口,區別於在Web服務器上運行的PHP環境(PHP-CGI等)。瀏覽器

咱們在Linux下常常使用」php –m」查找PHP安裝了那些擴展就是PHP命令行運行模式。 你能夠打入 php -h 來看看具體都有什麼命令。服務器

在php-cli模式下咱們能夠直接啓動一個php文件並執行,就像workerman中同樣數據結構

php index.php start

要說明的是,php-cli模式並無php運行超時的說法。併發

Module加載

通常是針對apache而言的,這種方式,他們的共同本質都是用 LoadModule 來加載 phpX_module,就是把php做爲apache的一個子模塊來運行。當經過web訪問php文件時,apache就會調用phpX_module來解析php代碼,那麼phpX_module是怎麼來將數據傳給php解析器來解析php代碼的呢?答案是經過sapi。

因此,以上的apache調用php執行的過程以下:

apache -> httpd -> php5_module -> sapi -> php

apache每接收一個請求,都會產生一個進程來鏈接php經過sapi來完成請求,可想而知,若是一旦用戶過多,併發數過多,服務器就會承受不住了。

並且,把mod_php編進apache時,出問題時很難定位是php的問題仍是apache的問題。

小結

若是要搭建一個高性能的PHP WEB服務器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了,不要再使用 Module加載或者 CGI 方式啦

相關文章
相關標籤/搜索