共计 1007 个字符,预计需要花费 3 分钟才能阅读完成。
CGI(Common Gateway InterFace)
既然 webserver 想把这个请求交给可以处理的人来做,是不是该告诉人家一些基本的,并且人家看得懂的信息信息?
Webserver 会传那些基本信息给后端处理请求的解析器呢?url,get 请求的 query_string,POST 数据,Http Header 等,那么 CGI 就规定了要传哪些参数,以及以一个什么样的格式传过去,后端处理完这个请求,又该以什么样的格式传回。
概念:CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与 PHP 应用进行“交谈”的一种工具,其程序须运行在网络服务器上。CGI 可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。也就是说,CGI 用来在 web 服务器与后端实现了 CGI 协议的程序之间提供一个沟通的桥梁,降低两者之间的耦合性。
缺陷:采用了效率低下的”FE”模式, 就是 Fork-And-Execute, 每个 web 请求进来之后,都会启动一个 php 程序,处理完请求后退出,浪费资源,高请求数下,服务器宕机。
FastCGI
有没有效率更高的解决办法呢,可以不可一完事先别走呢?
这就衍生出了 FastCGI,也可以理解为一种协议,在 CGI 协议上进行强化,从原来的”FE”模式进化为”LL”模式,即 Long-Live 模式,运行完毕之后,常驻内存。同样,它也是语言无关性的,只要你具有标准输入输出和环境变量,那么就 OK。
FastCGI 会先启动一个 Master 进程,Master 读取和处理基础的配置文件,初始化环境,之后依据配置生成多个 worker 进程来处理请求。并且可以动态调整 worker 的数量。
PHP-CGI
Fast-cgi 听起来很不错,有没人用用它的呀?php-cgi 是实现 FastCGI 协议的 php 解释器。
缺陷:
更改 php.ini 配置后需要重启 php-cgi 进程,且会杀死正在运行的进程。单进程,不具备进程管理能力,效率很低。
PHP-FPM
概念:一个实现 FastCGI 多进程 (进程池) 管理的管理器。开启之后,会看到多个 php-cgi 进程,它们都由 php-fpm 管理。
一些进步:
修改配置后,平滑过渡,新的 worker 进程使用新的配置,正在运行的 worker 进程处理完当前请求后自动 shutdown。多进程的效率比单进程更高。
转载来源:http://lib.csdn.net/article/p…