php集成php fpm后是否还分fastCGI和CGI运行模式?

关于php异步执行,看到laruence的一篇文章介绍fastcgi_finish_request()这个函数,但是现在php已经集成phpfpm,是否还要求必须FastCGI模式下运行PHP

阅读 4.8k
5 个回答

fastcgi_finish_request是PHP-FPM下提供的一个函数.可以冲刷(flush)所有响应的数据给客户端并结束请求.
这使得客户端结束连接后,能够继续执行不需要输出给用户的代码,但仍会阻塞当前PHP-FPM工作进程.

附:PHP FastCGI进程管理器PHP-FPM的架构
一个master进程,支持多个pool,每个pool由master监听不同的端口,pool中有多个worker进程.
每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加.
每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的进程.
每个worker进程能保持一个到MySQL/Memcached/Redis的持久连接,
实现"连接池",避免重复建立连接,对程序透明.
master进程采用epoll模型异步接收和分发请求,listen监听端口,epoll_wait等待连接,
然后分发给对应pool里的worker进程,worker进程accpet请求后poll处理连接,
如果worker进程不够用,master进程会prefork更多进程,
如果prefork达到了pm.max_children上限,worker进程又全都繁忙,
这时master进程会把请求挂起到连接队列backlog里(默认值是511).

大神来了。
fpm是管理fastcgi的。 所以你如果用fpm的方式的话,本身就是fastcgi模式了。

phpfpm管理下的PHP就是FastCGI模式

现在都是fastcgi了吧

cgi和fastcgi在目前的php中同时存在
你仍然可以通过php-cgi访问到原始的cgi模式,当然在php-cgi中,fastcgi_finish_request这个函数也不再存在,它仅在php-fpm运行的php中才有效

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进