fastcgi,cgi,php-fpm之间的关系及区别

2018年5月15日09:32:29 发表评论

 

fastcgi,cgi,php-fpm之间的关系及区别
分享一篇关于PHP程序执行中的fastcgi,cgi,php-fpm之间的关系及区别,本文通过简单易懂的方式去描述他们的关系以及各自的作用是什么。

 

一、CGI

所谓的环境服务器只是内容的分发者,常用的有apache、nginx等。比如ngxin中如果有请求index.html,那么ngxin会根据你的路径配置去相对应的找到这个文件最后返回给浏览器,这里分发的是静态数据。如果是请求的是一个PHP文件呢?假设请求过来的是一个index.php,这个时候nginx发现它居然不是静态文件,就会去找PHP解析器来帮忙,他会把这个请求简单处理后交给PHP这个哥们。他会把一系列的数据也一起交给PHP,一般有url中的整个数据,以及header头中的一些信息等 。回过头来那么CGI是什么呢?他就是一种规定标准,规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。

 

二、FastCGI

当环境服务器把东西转交给PHP时,PHP会解析php.ini文件,然后通过php的配置要求去处理这些请求,再以规定CGI规定的格式告诉环境服务器我处理完了,退出进程。环境服务器再把结果返回给浏览器。

通过上面解释,会发现每次请求php都要去重新初始化,这样及其的降低性能,那么Fastcgi就是来提高这块的性能。Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对请求进程的作用。

 

三、PHP-FPM

上面在CGI的介绍中提到PHP会去解析请求以及重新去加载php.ini文件,这个东西就是php-cgi解释器。php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理。PHP-FPM的作用就是去调度管理这些进程,说白了fastcgi是一个协议,php-fpm实现了这个协议

当我们修改php.ini之后,php-cgi进程是没办法平滑重启的。php-fpm对此的处理机制是新的worker用新的配置,已经存在的worker处理完手上的活就可以歇着了,通过这种机制来平滑过度。

 

 

一点PHP,每天一点技术分享。

 

x

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: