FastCGI及PHP运行流程
2021-06-30 10:20:56 0 举报
FastCGI协议与PHP运行流程
作者其他创作
大纲/内容
httptcp/ip
php_request_shutdown()
SAPI(cli/fpm/cgi)
找到空闲worker,如果空闲时间超过pm.process_idle_timeout大小时将被关闭。这个机制可能会关闭所有的worker。
php_module_startup()
listen
ip:port/unix socket
accept
client
php_request_startup()
phpfpm worker
如php-fpm.conf配置listen = /tmp/php-fpm.sock
phpfpm master
fastcgi协议
php_execute_script()
fastcgi_pass ip:port/unix socket
PHP解释器
每个worker每次只能accept一个请求来处理,处理结束后才能accept下一个请求也就是一个worker同时只能处理一个请求
反向代理交给下游处理
1s定时器
Nginx(epoll)处理http请求,并通过
main()
php_module_shutdown()
phpfpm实现了fastCGI协议,fastCGI有两种特性:第一个特性是,可以让多个 HTTP 请求使用同一个连接进行数据交互,这样应用(即phpfpm)的实现就可以采用事件驱动编程模型或者多线程、多进程编程模型;第二个特性是,同一个请求的多个数据流的传输可以复用同一个连接,这样 FastCGI 应用在输出响应数据时,就可以把 stdout、stderr 两个数据流的数据通过同一个连接发送给 Web 服务器,不用像 CGI/1.1 应用那样必须使用两个连接才行。
master 进程与 worker 进程之间不会直接进行通信,master 通过共享内存获取 worker 进程的信息,比如 worker 进程当前状态、已处理请求数等,当 master 进程要杀掉一个 worker 进程时则通过发送信号的方式通知 worker 进程。
收藏
0 条评论
下一页