快速业务通道

神奇的fastcgi_finish_request

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23

  当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法。

  听起来可能有些茫然,我们通过几个例子来说明一下:

  1. <?php  
  2.  
  3. echo ''例子:'';  
  4.  
  5. fastcgi_finish_request();  
  6.  
  7. echo ''To be, or not to be, that is the question.'';  
  8.  
  9. file_put_contents(''log.txt'', ''生存还是毁灭,这是个问题。'');  
  10.  
  11. ?> 

  通过浏览器(不是命令行!)运行此脚本,结果发现并没有输出相应的字符串,但却生成了相应的文件。由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!

  合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:

  1. <?php  
  2.  
  3. echo ''例子:'';  
  4.  
  5. file_put_contents(''log.txt'', date(''Y-m-d H:i:s'') . " 上传视频\n", FILE_APPEND);  
  6.  
  7. fastcgi_finish_request();  
  8.  
  9. sleep(1);  
  10. file_put_contents(''log.txt'', date(''Y-m-d H:i:s'') . " 转换格式\n", FILE_APPEND);  
  11.  
  12. sleep(1);  
  13. file_put_contents(''log.txt'', date(''Y-m-d H:i:s'') . " 提取图片\n", FILE_APPEND);  
  14.  
  15. ?> 

  代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志。

  末了给您提个醒,Yahoo在Best Practices for Speeding Up Your Web Site中提到了Flush the Buffer Early,也就是利用PHP中的flush方法把内容尽快发到客户端去,虽然表面上它和本文介绍的fastcgi_finish_request有些许的类似,但本质上完全不同,别混淆了。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号