成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

mudiyouyou / 938人閱讀

摘要:基本應用介紹沖刷所有響應的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應的數(shù)據(jù)給客戶端并結束請求。需要長時間處理的代碼處理完成后刪除進程記錄文件參考非阻塞實現(xiàn)方法

前言

在實際項目中經(jīng)常會有這樣的需求,對于前端發(fā)過來的請求,需要在后端進行長時間的處理,但為了讓使用者有更好的體驗,為了讓PHP在后端處理長時間任務時不阻塞,快速響應頁面請求,因此在這里對fastcgi_finish_request的應用進行總結歸納。當然php實現(xiàn)非阻塞的方式有很多種,比如異步腳本、swoole,但個人認為fastcgi_finish_request最為簡單方便。

基本應用 fastcgi_finish_request介紹

(PHP 5 >= 5.3.3, PHP 7)

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

boolean fastcgi_finish_request ( void )

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

返回值

成功時返回 TRUE, 或者在失敗時返回 FALSE

注意問題

PHP 與 Web 服務器使用了PHP-FPM(FastCGI進程管理器),那通過fastcgi_finish_request() 函數(shù)能馬上結束會話,而 PHP 線程可以繼續(xù)在后臺運行。也就是說只針對php-fpm的進程管理方式才能使用該函數(shù)

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

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

在高并發(fā)下執(zhí)行時間過久也會導致fastcgi進程不夠用,不能及時釋放,就會爆502錯誤了。

應用
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.",時間".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);

運行測試

兼容非php-fpm

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

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

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

保證進程單一運行

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

 
$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 需要長時間處理的代碼

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

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

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

轉載請注明本文地址:http://m.hztianpu.com/yun/29306.html

相關文章

  • php利用fastcgi_finish_request實現(xiàn)阻塞相關拓展

    摘要:基本應用介紹沖刷所有響應的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應的數(shù)據(jù)給客戶端并結束請求。需要長時間處理的代碼處理完成后刪除進程記錄文件參考非阻塞實現(xiàn)方法 前言 在實際項目中經(jīng)常會有這樣的需求,對于前端發(fā)過來的請求,需要在后端進行長時間的處理,但為了讓使用者有更好的體驗,為了讓PHP在后端處理長時間任務時不阻塞,快速響應頁面請求,因此在這里對fastcgi_finish_request的應用進...

    xcold 評論0 收藏0
  • php利用fastcgi_finish_request實現(xiàn)阻塞相關拓展

    摘要:基本應用介紹沖刷所有響應的數(shù)據(jù)給客戶端此函數(shù)沖刷所有響應的數(shù)據(jù)給客戶端并結束請求。需要長時間處理的代碼處理完成后刪除進程記錄文件參考非阻塞實現(xiàn)方法 前言 在實際項目中經(jīng)常會有這樣的需求,對于前端發(fā)過來的請求,需要在后端進行長時間的處理,但為了讓使用者有更好的體驗,為了讓PHP在后端處理長時間任務時不阻塞,快速響應頁面請求,因此在這里對fastcgi_finish_request的應用進...

    Meils 評論0 收藏0
  • 使用XHProf分析PHP性能瓶頸(一)

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

    pkwenda 評論0 收藏0
  • 后端知識拓展 - 收藏集 - 掘金

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

    CoderBear 評論0 收藏0
  • 后端知識拓展 - 收藏集 - 掘金

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

    Carl 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<