成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP fastcgi_finish_request 方法

macg0406 / 1514人閱讀

摘要:介紹每有一個(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

相關(guān)文章

  • php利用fastcgi_finish_request實(shí)現(xiàn)非阻塞及相關(guā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)...

    Meils 評(píng)論0 收藏0
  • php利用fastcgi_finish_request實(shí)現(xiàn)非阻塞及相關(guā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)...

    xcold 評(píng)論0 收藏0
  • php利用fastcgi_finish_request實(shí)現(xiàn)非阻塞及相關(guā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)...

    mudiyouyou 評(píng)論0 收藏0
  • Laravel 發(fā)送響應(yīng)

    摘要:發(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...

    PAMPANG 評(píng)論0 收藏0
  • 使用XHProf分析PHP性能瓶頸(一)

    摘要:輸出的性能數(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...

    pkwenda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<