您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何理解PHP中的fastcgi和php-fpm”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解PHP中的fastcgi和php-fpm”吧!
講到PHP開發,就一定會提到fastcgi和php-fpm,這兩個東西對PHP的性能有著至關重要的作用。在百度實習的這段時間里,用到的ODP環境就是用的php-fpm,但一直以來對它一無所知,甚至對整個PHP都概念模糊,這兩天任務提前完成,借此機會對PHP做一點深入的了解。
Web服務器
PHP作為一種專門為Web開發而生的服務端語言,其實現必須借助Web服務器,常見的PHP架構有LAMP和LNMP,找張圖片解釋了PHP的訪問情況。
mod_php模式
可以看出請求是發送到Apache,之后由Apache來解析處理PHP并返回結果給客戶端。當我們使用LAMP架構時,需要改動Apache的配置文件httpd.conf
加入如下兩句 LoadModule phpx_module PHP_ROOT/phpxapache2_2.dllAddType appliaction/x-httpd-php.php 將下面語句做如下修改<IfModule dir_module> DirectoryIndex index.html</IfModule>改為 <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.phtml</IfModule>
使用LoadModule來加載phpx_module(x為PHP版本號)。可以理解為將PHP作為Apache的一個子模塊來運行,當請求訪問PHP時,Apache就會調用phpx_module來解析PHP代碼。
php_module是如何解析PHP代碼的呢?——通過sapi。
Apache和PHP與sapi的關系如下圖:
sapi就是一個中間層,提供和外部通信的接口,類似于socket,使得PHP可以和其他應用進行數據交互。PHP提供了多種sapi,如給Apache和Nginx的php_module,給IIS的ISAPI等。
Apache調用PHP的執行過程:
Apache -> httpd -> php_module -> sapi -> PHP
總之,Web服務器通過php_module方式解析執行PHP的模式即為mod_php。
mod_fastcgi模式
PHP的sapi的另一種方式就是提供cgi模式,現在cgi已經被fastcgi取代。
所謂cgi,就是common gateway interface,當Web服務器收到請求,就會把請求交給cgi程序(如PHP的fastcgi),cgi就將請求做處理(解析PHP),然后將結果返回給Web服務器,Web服務器再將請求返回給客戶端。
cgi的不足之處就是每次請求都會有啟動和退出的過程,也就是飽受詬病的fork-and-execute模式,在大量并發的請況下就完蛋了。
fastcgi的誕生彌補這一不足,它的原理是早早啟動好等待請求,在響應完請求后不會退出,繼續等待下一個請求。
利用fastcgi的運行方式稱為mod_fastcgi。
對比一下mod_php和mod_fastcgi的不同。前者是將PHP作為Web服務器的一個模塊來運行,PHP與服務器結合度大。后者是將fastcgi作為中間過程,PHP和Web服務器只通過fastcgi來完成請求與響應。
mod_php模式
mod_php模式下,Apache每接受一個請求,就會產生一個進程來連接PHP通過sapi完成請求,在高并發的情況下,顯然服務器會無法承受。
mod-fastcgi模式
這張圖可以看出,每當有請求到達時,httpd會調用sapi將請求傳遞給PHP,完成后不退出,等待下一請求。并發性能大大提高。
php-fpm
磨刀不誤砍柴工,前面的講解只為引出php-fpm。php-fpm是做什么的呢?其實就是用來輔助fastcgi的。
fastcgi是一種與平臺無關,與語言無關的接口實現,只需要不同語言按照規定方式實現即可完成與Web服務器的通信。上圖所示的php-cgi就是PHP自帶的fastcgi管理器。
網上看到的php-cgi的問題主要有兩點:
php-cgi變更php.ini陪之后需要重啟php-cgi才能使新的php.ini生效,不能平滑重啟。
若直接殺死php-cgi,PHP便無法運
php-fpm完美解決了上述不足,是一款專用的fastcgi管理器。
總之,php-fpm的作用就是專門管理PHP中的fastcgi,使PHP在高并發的情況下也能安全穩定的與Web服務器合作,完成請求響應過程。
感謝各位的閱讀,以上就是“如何理解PHP中的fastcgi和php-fpm”的內容了,經過本文的學習后,相信大家對如何理解PHP中的fastcgi和php-fpm這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。