国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php中fastcgi_finish_request的介紹及其實現非阻塞的代碼

2020-03-22 18:28:03
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于php中fastcgi_finish_request的介紹及其實現非阻塞的代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

前言

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

基本應用fastcgi_finish_request介紹

(PHP 5 = 5.3.3, PHP 7)

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

boolean fastcgi_finish_request ( void )

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

返回值

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

注意問題

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

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

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

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

應用
echo program start... file_put_contents( /tmp/garylog.log , start-time: .date( Y-m-d H:i:s ). /n , 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 ). /n , FILE_APPEND);sleep(10);file_put_contents( /tmp/garylog.log , end-time: .date( Y-m-d H:i:s ). /n , FILE_APPEND);

運行測試

381344182-5b7e62f4232d3_articlex.png

997751714-5b7e6310816d1_articlex.png

兼容非php-fpm

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

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

不會造成代碼部署在非fpm環境下造成問題.

保證進程單一運行

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

 $processId = realpath(__FILE__) . - . get_html' target='_blank'>class($this);$filename = md5($processId);$file = /tmp/ .$filename;if(!file_exists($filename)){ file_put_contents($file, getmypid());}else{ return true; 
獨孤九賤(5)_ThinkPHP5視頻教程

ThinkPHP是國內最流行的中文PHP開發框架,也是您Web項目的最佳選擇。《VeVb.com獨孤九賤(5)-ThinkPHP5視頻教程》課程以ThinkPHP5最新版本為例,從最基本的框架常識開始,將...

Peter-Zhu 2017-05-16 12:03:57


獨孤九賤(4)_PHP視頻教程

江湖傳言:PHP是世界上最好的編程語言。真的是這樣嗎?這個梗究竟是從哪來的?學會本課程,你就會明白了。PHP 出品的PHP入門系統教學視頻,完全從初學者的角度出發,絕不玩虛的,一切以實用、有用...

Peter-Zhu 2017-03-20 22:47:17


獨孤九賤(1)_HTML5視頻教程

《VeVb.com原創html5視頻教程》課程特色:php 原創幽默段子系列課程,以惡搞,段子為主題風格的php視頻教程!輕松的教學風格,簡短的教學模式,讓同學們在不知不覺中,學會了HTML知識。...

Peter-Zhu 2017-03-13 10:15:11


ThinkPHP5實戰之[教學管理系統]

本套教程,以一個真實的學校教學管理系統為案例,手把手教會您如何在一張白紙上,從零開始,一步一步的用ThinkPHP5框架快速開發出一個商業項目。

Peter-Zhu 2017-07-24 16:48:56


PHP入門視頻教程之一周學會PHP

所有計算機語言的學習都要從基礎開始,《PHP入門視頻教程之一周學會PHP》不僅是PHP的基礎部分更主要的是PHP語言的核心技術,是學習PHP必須掌握的內容,任何PHP項目的實現都離不開這部分的內容,通...

PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安远县| 芦山县| 即墨市| 务川| 库车县| 清徐县| 简阳市| 孙吴县| 临汾市| 永康市| 饶阳县| 图木舒克市| 兰州市| 屏东县| 如皋市| 汉沽区| 曲阳县| 双江| 澄城县| 怀宁县| 共和县| 鹿邑县| 北安市| 共和县| 合山市| 米易县| 宜君县| 民权县| 清水河县| 镇安县| 康马县| 高平市| 桃源县| 准格尔旗| 商南县| 方城县| 乾安县| 公主岭市| 商南县| 博湖县| 德格县|