摘要:介紹每有一個(gè)用戶請(qǐng)求,都會(huì)先要?jiǎng)?chuàng)建的子進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程,這就是模式。當(dāng)子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成。子進(jìn)程接著等待并處理來(lái)自進(jìn)程管理器的下一個(gè)連接。運(yùn)行在模式時(shí),提供的方法。
本文介紹,PHP運(yùn)行在FastCGI模式時(shí),F(xiàn)PM提供的方法:fastcgi_finish_request。
在說(shuō)這個(gè)方法之前,我們先了解PHP有哪些常用的運(yùn)行模式?
PHP運(yùn)行模式
CGI 通用網(wǎng)關(guān)接口 / Common Gateway Interface
CGI已經(jīng)是比較老的模式了,這幾年都很少用了。
介紹:每有一個(gè)用戶請(qǐng)求,都會(huì)先要?jiǎng)?chuàng)建CGI的子進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程,這就是Fork-And-Execute模式。
當(dāng)用戶請(qǐng)求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi)存,CPU時(shí)間等。
缺點(diǎn):在高訪問(wèn)需求的情況下,CGI的進(jìn)程Fork就會(huì)成為很大的服務(wù)器負(fù)擔(dān)。
FastCGI(常駐型CGI / Long-Live CGI)
使用的比較多。
介紹:FastCGI是CGI的升級(jí)版本,F(xiàn)astCGI像是一個(gè)常駐 (long-live)型的 CGI。
它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去 Fork 一次。
FastCGI是一個(gè)可伸縮地、高速地在HTTP server和動(dòng)態(tài)腳本語(yǔ)言間通信的接口。
Apache、Nginx、lighttpd 等流行的 HTTP server 都支持FastCGI。
原理:
1.Web Server啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器(PHP-FPM);
2.FastCGI進(jìn)程管理器初始化啟動(dòng)多個(gè)CGI解釋器進(jìn)程并等待來(lái)自Web Server的連接;
3.當(dāng)客戶端請(qǐng)求到達(dá)Web Server時(shí),F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個(gè)CGI解釋器;
4.Web server將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi;
5.FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回Web Server。
當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成。
FastCGI子進(jìn)程接著等待并處理來(lái)自FastCGI進(jìn)程管理器的下一個(gè)連接。
CLI模式
介紹:PHP-CLI是PHP Command Line Interface的簡(jiǎn)稱,就是PHP在命令行中運(yùn)行。
Windows、Linux下都支持PHP-CLI模式。
模塊模式
介紹:模塊模式是以mod_php5模塊的形式集成的。
mod_php5模塊的作用是接收Apache傳遞過(guò)來(lái)的PHP文件請(qǐng)求,并處理這些請(qǐng)求,然后將處理后的結(jié)果返回給Apache。
Apache的配置文件httpd.conf中添加一行:
LoadModule php5_module modules/mod_php5.so
以上只是簡(jiǎn)單的讓大家了解下,如果有興趣可以查閱相關(guān)文章。
接下來(lái),我們來(lái)介紹:fastcgi_finish_request。
fastcgi_finish_request
PHP運(yùn)行在FastCGI模式時(shí),F(xiàn)PM提供的方法:fastcgi_finish_request。
官方地址:http://php.net/manual/zh/func...
官方解釋:沖刷(flush)所有響應(yīng)的數(shù)據(jù)給客戶端。
個(gè)人理解:在調(diào)用方法的時(shí)候,會(huì)發(fā)送響應(yīng),關(guān)閉連接,但是不會(huì)結(jié)束PHP的運(yùn)行。
不理解的可以直接運(yùn)行如下代碼:
//代碼: echo date("Y-m-d H:i:s", time())." "; //會(huì)輸出 fastcgi_finish_request(); set_time_limit(0); //避免超時(shí)報(bào)錯(cuò) ini_set("memory_limit", "-1"); //避免內(nèi)存不足 sleep(5); $time = date("Y-m-d H:i:s", time())." "; echo $time; //不會(huì)輸出 file_put_contents("test.txt", $time, FILE_APPEND);
執(zhí)行這段函數(shù)后你會(huì)發(fā)現(xiàn),可以實(shí)現(xiàn)異步操作,提高響應(yīng)速度。
可以使用fastcgi_finish_request()函數(shù)集成隊(duì)列,可以把消息異步發(fā)送到隊(duì)列。
因?yàn)檫@個(gè)函數(shù)只在FastCGI模式下存在,考慮可移植性可以加上以下代碼:
if (!function_exists("fastcgi_finish_request")) { function fastcgi_finish_request() { } }
大家可以根據(jù)自己的情況,進(jìn)行嘗試使用。
Thanks ~
作者:PHP后端開(kāi)發(fā)者
提供PHP相關(guān)技術(shù)服務(wù)(自己懂的知識(shí))。
QQ交流群:564557094。
關(guān)注微信公眾號(hào),留言即可,看到留言后會(huì)及時(shí)回復(fù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22639.html
摘要:基本應(yīng)用介紹沖刷所有響應(yīng)的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應(yīng)的數(shù)據(jù)給客戶端并結(jié)束請(qǐng)求。需要長(zhǎng)時(shí)間處理的代碼處理完成后刪除進(jìn)程記錄文件參考非阻塞實(shí)現(xiàn)方法 前言 在實(shí)際項(xiàng)目中經(jīng)常會(huì)有這樣的需求,對(duì)于前端發(fā)過(guò)來(lái)的請(qǐng)求,需要在后端進(jìn)行長(zhǎng)時(shí)間的處理,但為了讓使用者有更好的體驗(yàn),為了讓PHP在后端處理長(zhǎng)時(shí)間任務(wù)時(shí)不阻塞,快速響應(yīng)頁(yè)面請(qǐng)求,因此在這里對(duì)fastcgi_finish_request的應(yīng)用進(jìn)...
摘要:基本應(yīng)用介紹沖刷所有響應(yīng)的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應(yīng)的數(shù)據(jù)給客戶端并結(jié)束請(qǐng)求。需要長(zhǎng)時(shí)間處理的代碼處理完成后刪除進(jìn)程記錄文件參考非阻塞實(shí)現(xiàn)方法 前言 在實(shí)際項(xiàng)目中經(jīng)常會(huì)有這樣的需求,對(duì)于前端發(fā)過(guò)來(lái)的請(qǐng)求,需要在后端進(jìn)行長(zhǎng)時(shí)間的處理,但為了讓使用者有更好的體驗(yàn),為了讓PHP在后端處理長(zhǎng)時(shí)間任務(wù)時(shí)不阻塞,快速響應(yīng)頁(yè)面請(qǐng)求,因此在這里對(duì)fastcgi_finish_request的應(yīng)用進(jìn)...
摘要:基本應(yīng)用介紹沖刷所有響應(yīng)的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應(yīng)的數(shù)據(jù)給客戶端并結(jié)束請(qǐng)求。需要長(zhǎng)時(shí)間處理的代碼處理完成后刪除進(jìn)程記錄文件參考非阻塞實(shí)現(xiàn)方法 前言 在實(shí)際項(xiàng)目中經(jīng)常會(huì)有這樣的需求,對(duì)于前端發(fā)過(guò)來(lái)的請(qǐng)求,需要在后端進(jìn)行長(zhǎng)時(shí)間的處理,但為了讓使用者有更好的體驗(yàn),為了讓PHP在后端處理長(zhǎng)時(shí)間任務(wù)時(shí)不阻塞,快速響應(yīng)頁(yè)面請(qǐng)求,因此在這里對(duì)fastcgi_finish_request的應(yīng)用進(jìn)...
摘要:發(fā)送響應(yīng)發(fā)送響應(yīng)頭發(fā)送響應(yīng)體發(fā)送到客戶端若是模式,則結(jié)束客戶端響應(yīng)后異步執(zhí)行服務(wù)器端的后續(xù)任務(wù),例如中間件的方法和事件等后續(xù)動(dòng)作執(zhí)行中間件的方法和事件等至此,框架核心流程全部走完 Laravel 發(fā)送響應(yīng) public function send() { $this->sendHeaders(); $this->sendContent(); if (funct...
摘要:輸出的性能數(shù)據(jù)中添加數(shù)據(jù)。中間是要分析的代碼。是一個(gè)繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。這樣所有使用該環(huán)境的都會(huì)生效。這樣僅該項(xiàng)目生效。 安裝xhprof擴(kuò)展 wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0.9.4.tgz cd xhprof-0.9.4/extension/ sudo phpi...
閱讀 1415·2021-11-25 09:43
閱讀 2274·2021-09-27 13:36
閱讀 1128·2021-09-04 16:40
閱讀 1968·2019-08-30 11:12
閱讀 3325·2019-08-29 14:14
閱讀 579·2019-08-28 17:56
閱讀 1338·2019-08-26 13:50
閱讀 1260·2019-08-26 13:29