首頁 >php框架 >Workerman >workerman之小談PHP中的幾種運作模式

workerman之小談PHP中的幾種運作模式

藏色散人
藏色散人轉載
2019-11-26 14:04:062519瀏覽

以下由workerman使用教學欄位來介紹PHP中的幾個運行模式,希望對需要的朋友有幫助!

workerman之小談PHP中的幾種運作模式

我們知道 workerman 程式需要在php-cli模式下執行,也就是命令列模式,這塊我們有必要了解一下。話說PHP當下共有4種運作模式,分別是CGI、FastCGI、CLI和Web模組模式。

CGI

全名為「通用網關介面」(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web伺服器上的程式請求數據,描述的是客戶端和這個程式之間傳輸資料的一種標準,另外CGI獨立於任何語言,所以可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。

CGI針對每個使用者請求都要開單獨的子進程去維護,所以數量多的時候會出現效能問題,最近幾年很少用。

FastCGI

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)可以運作。

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 方式啦

以上是workerman之小談PHP中的幾種運作模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除