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

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

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


phpfpm管理下的PHP就是FastCGI模式


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


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).


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


现在都是fastcgi了吧

【热门文章】
【热门文章】