当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法。
听起来可能有些茫然,我们通过几个例子来说明一下:
<?php
echo '例子:';
fastcgi_finish_request();
echo 'To be, or not to be, that is the question.';
file_put_contents('log.txt', '生存还是毁灭,这是个问题。');
?>
通过浏览器(不是命令行!)运行此脚本,结果发现并没有输出相应的字符串,但却生成了相应的文件。由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:
<?php
echo '例子:';
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);
fastcgi_finish_request();
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);
?>
代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志。
末了给您提个醒,Yahoo在Best Practices for Speeding Up Your Web Site中提到了Flush the Buffer Early,也就是利用PHP中的flush方法把内容尽快发到客户端去,虽然表面上它和本文介绍的fastcgi_finish_request有些许的类似,但本质上完全不同,别混淆了。
---------------------------
echo jsonTrue();//客户端返回成功结果,后台进程继续执行
fastcgi_finish_request();
....
end();
分享到:
相关推荐
fastcgi_finish_request(); echo ‘To be, or not to be, that is the question.’; file_put_contents(‘log.txt’, ‘生存还是毁灭,这是个问题。’); ?> 通过浏览器(不是命令行!)运行此脚本,结果发现并...
时域LMS与RLS算法自适应滤波算法-RLS_finish1.m 本帖最后由 dingkillerwhale 于 2013-5-20 09:56 编辑 数据由于太大无法上传 以下是LMS算法以及RLS算法,其中RLS针对恒模信号与非恒模信号进行区分
run_after_finish.bat
FileZilla_2_2_4b_src_finish7x7_Vc_源码.zip
Simple lock with DS1307 ORCAD PCB
ASP.NET_MVC_4_and_the_Web_API_-_Building_a_REST_Service_from_Start_to_Finish.pdf
超声波测距_lesson2fo_finish9ua_超声波测距_源码
LMS 算法的运用 LMS 算法 在语音识别 LMS 算法在有源滤波器 LMS算法在人脸识别的运用
ERP信息化专业资料:SAP专业学习资料ABA-TS-K2-FICO-FI-R040_SAP_cost_estimate_BOM_report_by_all_finish_goods_PL.doc
ERP信息化专业资料:SAP专业学习资料ABA-TS-K2-FICO-FI-R010_SAP_cost_estimate_BOM_report_by_all_finish_goods_SG03.doc
How did I managed to finish my first unity project !
一、若你使用的是FastCGI模式,使用fastcgi_finish_request()能马上结束会话,但PHP线程继续在跑。 echo "program start."; file_put_contents('log.txt','start-time:'.date('Y-m-d H:i:s'), FILE_APPEND); ...
时域LMS与RLS算法自适应滤波算法-LMS_finish.m 本帖最后由 dingkillerwhale 于 2013-5-20 09:56 编辑 数据由于太大无法上传 以下是LMS算法以及RLS算法,其中RLS针对恒模信号与非恒模信号进行区分
OFB implementation, finish chain.
影院管理系统的前端页面,一个项目包含增删改查,查看等等一些基本功能
时域LMS与RLS算法自适应滤波算法-RLS_finish2.m 本帖最后由 dingkillerwhale 于 2013-5-20 09:56 编辑 数据由于太大无法上传 以下是LMS算法以及RLS算法,其中RLS针对恒模信号与非恒模信号进行区分
Fixed Point operations with C++ (to finish)
QT平台制作的计算器小程序,可实现加减乘除等功能