我們知道 workerman 程式需要在php-cli模式下運行,也就是命令列模式,這塊我們有必要了解一下。
說PHP當下共有4種運行模式,分別是CGI、FastCGI、CLI和Web模組模式。
全名為「通用網關介面」(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web伺服器上的程式請求數據,描述的是客戶端和這個程式之間傳輸資料的一種標準,另外CGI獨立於任何語言,所以可以用任何一種語言編寫,只要這種語言有標準輸入、輸出和環境變數。如php,perl,tcl等。
CGI針對每個使用者請求都要開單獨的子進程去維護,所以數量多的時候會出現效能問題,最近幾年很少用。
CGI的升級版本,FastCGI 像是常駐(long-live) 型的CGI,它可以一直執行著,只要啟動後,不會每次都要花費時間去解析php.ini、重新載入全部dll擴充並重初始化全部資料結構。
PHP使用PHP-FPM(FastCGI Process Manager),全名為PHP FastCGI進程管理器進行管理。
FastCGI工作原理
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)可以運作。
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執行逾時的說法。
一般是針對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 方式啦
相關推薦:
以上是PHP中的幾種運行模式 - CSDN博客的詳細內容。更多資訊請關注PHP中文網其他相關文章!