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