九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
php中fastcgi和php-fpm是什么東西


最近在研究和學(xué)習(xí)php的性能方面的知識(shí),看到了factcgi以及php-fpm,發(fā)現(xiàn)我對(duì)他們是少之又少的理解,可以說(shuō)幾乎是一無(wú)所知,想想還是蠻可怕的。決定仔細(xì)的學(xué)習(xí)一下關(guān)于這方面的知識(shí)。

參考和學(xué)習(xí)了以下文章: 
1. mod_php和mod_fastcgi和php-fpm的介紹,對(duì)比,和性能數(shù)據(jù) 
2. 實(shí)戰(zhàn)Nginx_取代

為了如何一步步的引出fastcgi和php-fpm,我先一點(diǎn)一點(diǎn)的說(shuō)說(shuō)關(guān)于php的周邊。哎。突然覺(jué)得人活著好累!

先說(shuō)說(shuō)web服務(wù)器

php是為web而生的一門(mén)后端語(yǔ)言,我們php狗當(dāng)然是最清楚的啦。所以php僅僅是一門(mén)后端語(yǔ)言,那么它就必須借助于web服務(wù)器,才能提供web功能。當(dāng)然其他的后端語(yǔ)言如果做web應(yīng)用,也必須借助于web服務(wù)器。好,由php引出了web服務(wù)器,不錯(cuò)!

那么常見(jiàn)的web服務(wù)器有哪些呢?php狗用的最多的就是Apache了,還有其他的:

  • apache

  • nginx

  • IIS

  • lighttpd

  • tomcat

基本上就是上面幾種,與php相關(guān)聯(lián)起來(lái)用的最多的就是Apache和Nginx了。

我們先舉例用apache當(dāng)作web服務(wù)器,來(lái)說(shuō)明一次完整的php訪問(wèn)的情況: 

 
圖片中就很好的解釋了php與Apache結(jié)合mysql數(shù)據(jù)庫(kù)的一次完成的web訪問(wèn)流程圖

mod_php模式

上面講清楚了php必須借助于web服務(wù)器才能提供web的功能服務(wù),現(xiàn)在看下他倆是怎么成為基友的。

我們用到的最多的就是Apache了。那么回憶一下,如何使apache是怎么能夠識(shí)別php代碼的?是不是apache的配置文件httpd.conf中加上或者修改這樣幾句:

//加入以下2句LoadModule php5_module D:/php/php5apache2_2.dllAddType application/x-httpd-php .php//將下面的<IfModule dir_module>    DirectoryIndex index.html</IfModule>//將其修改為:<IfModule dir_module>    DirectoryIndex index.html index.htm index.php index.phtml</IfModule>

上面的windows下安裝php和apache環(huán)境后的手動(dòng)配置,在linux下源碼安裝大致是這樣配置的:

./configure --with-mysql=/usr/local --with-apache=/usr/local/apache --enable-track-vars

所以,這種方式,他們的共同本質(zhì)都是用LoadModule來(lái)加載php5_module,就是把php作為apache的一個(gè)子模塊來(lái)運(yùn)行。當(dāng)通過(guò)web訪問(wèn)php文件時(shí),apache就會(huì)調(diào)用php5_module來(lái)解析php代碼。

那么php5_module是怎么來(lái)將數(shù)據(jù)傳給php解析器來(lái)解析php代碼的呢?

答案是通過(guò)sapi

我們?cè)賮?lái)看一張圖,詳細(xì)的說(shuō)說(shuō)apache 與 php 與 sapi的關(guān)系:

從上面圖中,我們看出了sapi就是這樣的一個(gè)中間過(guò)程,SAPI提供了一個(gè)和外部通信的接口,有點(diǎn)類(lèi)似于socket,使得PHP可以和其他應(yīng)用進(jìn)行交互數(shù)據(jù)(apache,nginx,cli等)。php默認(rèn)提供了很多種SAPI,常見(jiàn)的給apache和nginx的php5_module,CGI,給IIS的ISAPI,還有Shell的CLI。

所以,以上的apache調(diào)用php執(zhí)行的過(guò)程如下:

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

好了。apache與php通過(guò)php5_module的方式就搞清楚了吧!

我們把這種運(yùn)行方式叫做mod_php模式

mod_fastcgi模式

上面我們仔細(xì)說(shuō)了php與apache通過(guò)php5_module,php5_module通過(guò)sapi的方式訪問(wèn)php,來(lái)達(dá)到php web的整個(gè)流程。

上面也說(shuō)到了sapi,sapi是php提供的統(tǒng)一接口,它提供給了php5_module和cgi等方式供web服務(wù)器來(lái)鏈接和解析php代碼。上面講到的php5_module加載模式,我們稱(chēng)之為mod_php模式。

那么!當(dāng)當(dāng)當(dāng)當(dāng)!馬上就要說(shuō)出fastcgi模式了。哈哈哈哈哈,太不容了。

那么php的sapi的另一種方式就是提供cgi模式,由于cgi比較老所以就出現(xiàn)了fastcgi來(lái)取代它。

所以,哎。沒(méi)辦法,又要說(shuō)什么是CGI了?

CGI(Common Gateway Interface)。CGI是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程。CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡(jiǎn)單的靜態(tài)超媒體文檔變成一個(gè)完整的新的交互式媒體。

看官方的解釋就蛋疼,簡(jiǎn)單的說(shuō),就是:cgi就是專(zhuān)門(mén)用來(lái)和web 服務(wù)器打交道的。web服務(wù)器收到用戶(hù)請(qǐng)求,就會(huì)把請(qǐng)求提交給cgi程序(php的fastcgi),cgi程序根據(jù)請(qǐng)求提交的參數(shù)作應(yīng)處理(解析php),然后輸出標(biāo)準(zhǔn)的html語(yǔ)句返回給web服服務(wù)器,再返回給客戶(hù)端,這就是普通cgi的工作原理。

cgi的好處就是完全獨(dú)立于任何服務(wù)器,僅僅是做為中間分子。提供接口給apache和php。他們通過(guò)cgi搭線(xiàn)來(lái)完成搞基動(dòng)作。這樣做的好處了盡量減少2個(gè)的關(guān)聯(lián),使他們2變得更獨(dú)立。

但是cgi有個(gè)蛋疼的地方,就是每一次web請(qǐng)求都會(huì)有啟動(dòng)和退出過(guò)程,也就是最為人詬病的fork-and-execute模式,這樣一在大規(guī)模并發(fā)下,就死翹翹了。

所以。這個(gè)時(shí)候fastcgi運(yùn)用而生了。它事先就早早的啟動(dòng)好了,而且可以啟動(dòng)多個(gè)cgi模塊,在那里一直運(yùn)行著等著,等著web發(fā)過(guò)來(lái)的請(qǐng)求,然后再給php解析運(yùn)算完成生成html給web后,也不會(huì)退出,而且繼續(xù)等著下一個(gè)web請(qǐng)求。而且這些cgi的模塊啟動(dòng)是可控的,可監(jiān)測(cè)的。這種技術(shù)還允許把web server和php運(yùn)行在不同的主機(jī)上,以大規(guī)模擴(kuò)展和改進(jìn)安全性而不損失生產(chǎn)效率。

所以現(xiàn)在一般操作系統(tǒng)都是fastcgi模式。cig模式也慢慢退出了歷史舞臺(tái)!我們文章中說(shuō)cgi一般也就指fastcgi。

所以把這種運(yùn)行方式叫做mod_fastcgi模式

我會(huì)在接下來(lái)的段落講如何使用fastcgi模式來(lái)連接php和apache(或者nginx)

總結(jié)一下:php 與 apache 或者 ngix 結(jié)合, 會(huì)用sapi 提供2種連接方法:mod_php和mod_fastcgi。mod_php 模式會(huì)將php模塊安裝到apache下面來(lái)運(yùn)行,2者結(jié)合度較大。mod_fastcgi模式則是作為一個(gè)中間過(guò)程,apache介紹用戶(hù)請(qǐng)求后,就發(fā)送給fastcgi, 再連接php來(lái)完成訪問(wèn)。

圖形表示一下這2種模式

mod_php 模式

mod_php 模式是將php模塊安裝到apache中,所以每一次apache結(jié)束的請(qǐng)求呢,都會(huì)產(chǎn)生一條進(jìn)程,這個(gè)進(jìn)程就完整的包括php的各種運(yùn)算計(jì)算等操作。

 
從圖中我們很清晰的可以看到,apache每接收一個(gè)請(qǐng)求,都會(huì)產(chǎn)生一個(gè)進(jìn)程來(lái)連接php通過(guò)sapi來(lái)完成請(qǐng)求,可想而知,如果一旦用戶(hù)過(guò)多,并發(fā)數(shù)過(guò)多,服務(wù)器就會(huì)承受不住了。

而且,把mod_php編進(jìn)apache時(shí),出問(wèn)題時(shí)很難定位是php的問(wèn)題還是apache的問(wèn)題。

mod_fastcgi 模式

mod_fastcgi模式則剛剛相反,fastcgi是一個(gè)獨(dú)立與apache和php的獨(dú)立個(gè)體,它隨著apache一起啟動(dòng),生成多個(gè)cig模塊,等著apache的請(qǐng)求:

圖中fastcgi早早的啟動(dòng)好了,靜靜的在哪里等著,已有apache發(fā)來(lái)的httpd請(qǐng)求就立馬接收過(guò)來(lái),通過(guò)調(diào)用sapi給php,完成運(yùn)算。而且不會(huì)退出。這樣就能應(yīng)對(duì)大規(guī)模的并發(fā)請(qǐng)求,因?yàn)閣eb server的要做的事情少了,所以就更快的去處理下一個(gè)請(qǐng)求,這樣并發(fā)大大的。

由于apache 與 php 獨(dú)立了。出問(wèn)題,很好定位到底是哪里出問(wèn)題了。這點(diǎn)也是這種模式受歡迎的原因之一。

php-fpm

我了個(gè)大操,終于要說(shuō)到php-fpm了。^....^

先開(kāi)門(mén)見(jiàn)山說(shuō)php-fpm是干嘛好的了。它就是專(zhuān)門(mén)來(lái)輔助mode_fastcgi模式的。

嗯。很好,先知道它是干嘛的后,我們?cè)倩氐?code style="padding: 2px 4px; margin: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; border: 0px; background-color: rgb(214, 219, 223);">mode_fastcgi模式。通過(guò)前面的瞎雞巴一大堆的說(shuō)明,我已經(jīng)搞清楚了這種模式是怎么樣子的一種狀態(tài)了。

fastcgi 是一個(gè)與平臺(tái)無(wú)關(guān),與語(yǔ)言無(wú)關(guān),任何語(yǔ)言只要按照它的接口來(lái)實(shí)現(xiàn),就能實(shí)現(xiàn)自己語(yǔ)言的fastcgi能力和web server 通訊。

PHP-CGI就是PHP實(shí)現(xiàn)的自帶的FastCGI管理器。

雖然是php官方出品,自帶的,但是這丫的卻一點(diǎn)也不給力,性能太差,而且也很麻煩不人性化,主要體現(xiàn)在:

  1. php-cgi變更php.ini配置后需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟。

  2. 直接殺死php-cgi進(jìn)程,php就不能運(yùn)行了。

上面2個(gè)問(wèn)題,一直讓很多人病垢了很久,所以很多人一直還是在用mode_php方式。

直到 2004年(確定是這么早嗎?)一個(gè)叫 Andrei Nigmatulin的屌絲發(fā)明了PHP-FPM ,這神器的出現(xiàn)就徹底打破了這種局面,這是一個(gè)PHP專(zhuān)用的fastcgi管理器,它很爽的克服了上面2個(gè)問(wèn)題,而且,還表現(xiàn)在其他方面更表現(xiàn)強(qiáng)勁. 請(qǐng)戳官網(wǎng)

我擦,這一篇貌似又瞎比比的說(shuō)超時(shí)了啊。好吧。那windows和linux下安裝配置php-fpm就下一節(jié)來(lái)說(shuō)吧。反正我已經(jīng)已經(jīng)把php-fpm和fastcgi給講清楚了。



轉(zhuǎn)自:
SaveSave
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【轉(zhuǎn)】王帥:深入PHP內(nèi)核(二)
apache中配置php支持模塊模式、cgi模式和fastcgi模式的實(shí)驗(yàn)
Lighttpd 的安裝配置
PHP 運(yùn)行方式(PHP SAPI介紹)
基于php在各種web服務(wù)器的運(yùn)行模式詳解
CGI、FastCGI、CLI、Apache、ISAPI之PHP運(yùn)行環(huán)境對(duì)比
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服