国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php利用fastcgi_finish_request實(shí)現(xiàn)非阻塞及相關(guān)拓展

Meils / 2794人閱讀

摘要:基本應(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)行總結(jié)歸納。當(dāng)然php實(shí)現(xiàn)非阻塞的方式有很多種,比如異步腳本、swoole,但個(gè)人認(rèn)為fastcgi_finish_request最為簡(jiǎn)單方便。

基本應(yīng)用 fastcgi_finish_request介紹

(PHP 5 >= 5.3.3, PHP 7)

fastcgi_finish_request — 沖刷(flush)所有響應(yīng)的數(shù)據(jù)給客戶端

boolean fastcgi_finish_request ( void )

此函數(shù)沖刷(flush)所有響應(yīng)的數(shù)據(jù)給客戶端并結(jié)束請(qǐng)求。 這使得客戶端結(jié)束連接后,需要大量時(shí)間運(yùn)行的任務(wù)能夠繼續(xù)運(yùn)行。

返回值

成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE

注意問(wèn)題

PHP 與 Web 服務(wù)器使用了PHP-FPM(FastCGI進(jìn)程管理器),那通過(guò)fastcgi_finish_request() 函數(shù)能馬上結(jié)束會(huì)話,而 PHP 線程可以繼續(xù)在后臺(tái)運(yùn)行。也就是說(shuō)只針對(duì)php-fpm的進(jìn)程管理方式才能使用該函數(shù)

只要代碼運(yùn)行到這個(gè)位置,就已經(jīng)斷開請(qǐng)求返回參數(shù)給客戶端了。接下來(lái)的代碼都和客戶端沒有關(guān)系了。也就是說(shuō)對(duì)于輸出在頁(yè)面的內(nèi)容必須放在fastcgi_finish_request函數(shù)之前

fastcgi_finish_request()結(jié)束客戶端連接之后,運(yùn)行時(shí)間依然會(huì)受max_execution_time超時(shí)時(shí)間的影響,也就是說(shuō)如果預(yù)計(jì)到代碼在后端執(zhí)行時(shí)間比較久,還是要設(shè)定set_time_limit(0)

在高并發(fā)下執(zhí)行時(shí)間過(guò)久也會(huì)導(dǎo)致fastcgi進(jìn)程不夠用,不能及時(shí)釋放,就會(huì)爆502錯(cuò)誤了。

應(yīng)用
echo "program start...";

file_put_contents("/tmp/garylog.log","start-time:".date("Y-m-d H:i:s")."
", FILE_APPEND);

fastcgi_finish_request();sleep(1);

// set_time_limit(0);
// sleep(150);

$num = 25;
$num += 1;
sleep(5);
echo "debug...";
file_put_contents("/tmp/garylog.log", "start-proceed:".$num.",時(shí)間".date("Y-m-d H:i:s")."
", FILE_APPEND);

sleep(10);

file_put_contents("/tmp/garylog.log", "end-time:".date("Y-m-d H:i:s")."
", FILE_APPEND);

運(yùn)行測(cè)試

兼容非php-fpm

從代碼的可移植性講的話, 可以在代碼中附上如下代碼:

    if (!function_exists("fastcgi_finish_request")) {
          function fastcgi_finish_request()  {
          }
    }

不會(huì)造成代碼部署在非fpm環(huán)境下造成問(wèn)題.

保證進(jìn)程單一運(yùn)行

對(duì)于上面說(shuō)到的問(wèn)題:在高并發(fā)下執(zhí)行時(shí)間過(guò)久也會(huì)導(dǎo)致fastcgi進(jìn)程不夠用,不能及時(shí)釋放。同時(shí)我們的需求僅僅是為了起到觸發(fā)的作用,并不需要每次運(yùn)行,那么可以考慮使用下面的方法,避免重復(fù)占用進(jìn)程。

 
$processId = realpath(__FILE__) . "-" . get_class($this);
$filename = md5($processId);
$file = "/tmp/".$filename;
if(!file_exists($filename)){
    file_put_contents($file, getmypid());
}else{
    return true; 
}


## do somthing 需要長(zhǎng)時(shí)間處理的代碼

//處理完成后刪除進(jìn)程id記錄文件
unlink($file);
參考

PHP非阻塞實(shí)現(xiàn)方法

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30831.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)...

    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
  • 使用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
  • 后端知識(shí)拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來(lái)自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語(yǔ)言現(xiàn)未來(lái)已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...

    Carl 評(píng)論0 收藏0
  • 后端知識(shí)拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來(lái)自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語(yǔ)言現(xiàn)未來(lái)已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...

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

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

0條評(píng)論

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