CGI、fastCGI、PHP-FPM三者间的关系

以前总是好奇于我们写的代码是如何被服务器所运行的,查阅了一番资料后我来总结下

webService

在远古时期,我们的网页只有静态的 html ,这时候我们的 服务器 的作用只是做内容分发。
例如我们访问www.baidu.com/demo.html的时候,服务器就会给我们请求目录下的demo.html的文件展示给我们。
但事物在发展,随着动态语言的出现(PHP、Python等等)。服务器就不能简单的把文件用浏览器展示给我们
例如我们访问 www.baidu.com/demo.php 时,服务器就应该把demo.php的文件交给php的解析器来解析,这时候服务器要向解析器传输需要的数据了,因为语言不同所需要的数据格式就可能不同,这时候就需要制定一个统一的标准来传输数据。CGI(通用网关接口)标准就来了

CGI

作用: 用来规定传输哪些数据,以及用什么样的格式传递给后方处理这个请求的协议
在PHP中实现了这个协议的是PHP-CGI 程序,当我们的服务器收到demo.php 的请求时候,启动对应的CGI 程序,在这就是PHP-CGI
它接受浏览器传过来的 CGI格式的数据,幻化为php能看得懂的东,交给Php程序,再按照规定返回 CGI格式的处理结果给服务器。

执行流程如下:
是

但 CGI有一个很明显的一个问题:每次服务器发送请求都会重新执行一个进程,CGI进程处理请求结束后退出,当访问量增大,高并发情况下,就不适合了。于是诞生了 fastCGI

fastCGI

CGI 相比 它相当于一个常驻型的CGI,它分为master进程和worker,当 fastCGI过来时master进程解析配置文件,初始化执行环境,启动多个worker
当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是FastCGI的对进程的管理。

作为CGI的升级版,fastCGI只是一种协议,用来沟通程序和Web服务器的桥梁,它在一个进程中一次完成多个请求。

PHP-FPM(FastCGI Process Manager)

在这里插入图片描述

总结

CGI和FastCGI都是一种通讯协议
fastCGICGI的改良版
PHP-CGI是CGI协议的实现
PHP-FPM是FastCGI协议的实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值