CGI是什么
CGI全称通用网关接口。通用网关接口(Common Gateway Interface)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准
。— 维基百科
说的简单点,所谓CGI其实就是定义了服务器(如nginx)和处理程序(如PHP)之间该如何进行数据交互的标准。如果没有这个标准,服务器按照自己的方式把数据传给处理程序,那处理程序该如何识别,所以提供了一种各类服务器和各个处理程序都认同的的协议,规定了哪些数据该传递,以什么样的方式传递。
那所谓的数据
,又是什么?
这里的数据我认为应该分成两部分。第一部分是入:服务器传递给处理程序,这个时候会传递如url
、request body
、request header
等信息,PHP解析器(php-cgi)拿到这些信息,进行程序内部的处理。第二部分是出:处理程序把响应数据回传给服务器,这个时候的数据就会是response
等响应信息、服务器拿到数据后,通过cgi解析,处理完成后,返回给客户端。
CGI就那么完美吗?
答案当然是否定的,每一次的web请求,实现了CGI的进程都会fork一个进程进行处理,当请求处理完之后,就要关闭,这样频繁的对进程进行创建销毁,效率低、处理速度慢,而且当连接数一多,过多的进程就会消耗更多的资源和内存。
FastCGI是什么
FastCGI从根本上来说其实类似于cgi,也是与语言无关的一种协议。是为了解决cgi的频繁创建销毁造成的资源浪费、才孕育而生了FastCGI。
FPM又是什么
FPM或者说是PHP-FPM,官方对FPM的解释是Fastcgi Process Manager(Fastcgi 进程管理器)。在说FPM之前就不得不先说一下,PHP官方推出的php-cgi.
php-cgi虽然是官方出品,但是当修改php.ini文件后,需要重启php-cgi,而且php-cgi不支持平滑重启。
PHP-FPM是非官方出品的,是从php5.3之后加入的,它是对FastCGI协议的具体实现,负责一个进程池来管理web服务器的请求。
CGI、FastCGI、PHP-CGI和PHP-FPM关系图
今天的文章聊一聊CGI、FastCGI及FPM分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13750.html