摘要:話說當下一共有種運行模式,分別是和模塊模式。使用,全稱進程管理器進行管理。工作原理啟動時載入進程管理器進程管理器自身初始化,啟動多個解釋器進程并等待來自的連接當客戶端請求到達時,進程管理器選擇并連接到一個解釋器。
我們知道 workerman 程序需要在php-cli模式下運行,也就是命令行模式,這塊我們有必要了解一下。
話說PHP當下一共有4種運行模式,分別是CGI、FastCGI、CLI和Web模塊模式。
CGI全稱是“通用網關接口”(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web服務器上的程序請求數據,描述的是客戶端和這個程序之間傳輸數據的一種標準,另外CGI獨立于任何語言,所以可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。如php,perl,tcl等。
CGI針對每個用戶請求都要開多帶帶的子進程去維護,所以數量多的時候會出現性能問題,最近幾年很少用。
FastCGICGI的升級版本,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)可以工作。
CliPHP-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 方式啦
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28547.html
摘要:在中最常用的幾種回調寫法如下匿名函數做為回調匿名函數,也叫閉包函數,允許臨時創建一個沒有指定名稱的函數。最經常用作回調函數參數的值。匿名函數的回調經常將其賦給一個變量或一個對象的屬性最終結果會輸出。 在workerman中會經常使用,我們先寫一個回調函數,當某個行為被觸發后使用該函數處理相關邏輯。 在PHP中最常用的幾種回調寫法如下 匿名函數做為回調 匿名函數(Anonymous fu...
摘要:一號坑整合加載第三方有幾種方式,具體參考官方手冊我用的是第一種命名空間自動加載的方式,因為我下的版本是有命名空間的,所以一定要把目錄放對了,把文件夾放到下,并且把里面除文件外的所有文件改為結尾。 由于需要開發長連接應用,要用到了Workerman,我是Windows的服務器,所以要把Wokerman裝到windows,不得不說Windows做服務器那真是「好用」啊,一開始自己按照Wor...
摘要:后面每開啟一個子進程,會將子進程的存儲到中,用來后面主進程監控子進程,如果子進程意外終止,主進程可以重新佛。將當前子進程設置為會話組再次創建子進程,為了防止在的系統下重新打開控制終端。 wokerman 啟動分析 @(學習)[workerman, php] 前期想說的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點擊閱覽。 需要了解一...
摘要:如果服務器中該賬號的鑰匙對已經存在,并且已經將放到該賬號的設置中,可以跳過這一步。如果不符合,需要根據提示安裝必要的擴展。后續再進行補充做守護隊列監聽進程和自動部署到服務器的說明。 系統LAMP基礎環境是已經搭建好,記錄要將web項目部署到線上的過程如下,方便后續部署新項目時參考: laravel項目ubuntu 16.04php 7.0 克隆項目到服務器 (1)我們使用 your@e...
閱讀 2711·2021-11-25 09:43
閱讀 2093·2021-11-24 09:39
閱讀 1981·2021-11-17 09:33
閱讀 2763·2021-09-27 14:11
閱讀 1863·2019-08-30 15:54
閱讀 3233·2019-08-26 18:27
閱讀 1270·2019-08-23 18:00
閱讀 1818·2019-08-23 17:53