一. CGI是什么
CGI,全称是Common Gateway Interface,翻译过来就是“通用网关接口”,定义了一个接口标准,描述了数据怎么在服务器和外部应用程序之间怎么传递。php
二. CGI的来历
在很早以前,互联网只有些静态内容,浏览器发送资源请求,服务器接受请求并返回服务器上的静态文件便可。数据库
随着互联网的发展,动态内容产生了,这些动态内容涉及到了数据库,可以操做数据库的动态语言将数据处理后返回给WebServer,WebServer再返回给浏览器。编程
因为有不少种动态语言和不少种浏览器,它们之间面临着不兼容的状况,这时候就须要在它们之间设立一个接口标准,这就是CGI。浏览器发起请求,WebServer会将请求发给对应的CGI程序,CGI再调用外部程序来处理请求并返回结果。浏览器
三. CGI的做用
WebServer是经过以下方式来CGI程序进行通讯的,因此只要支持标准输入输出和环境变量的语言,都能用来编写CGI程序。服务器
环境变量(请求类型,请求IP..)
标准输入(请求主体)
标准输出(请求响应)
CGI描述了如何在环境变量中传递请求的基本信息,如何经过标准输入传递请求体,以及如何经过标准输出来传递输出。这就使编程语言能够很容易得使用环境变量、标准输入输出架构
四. CGI的缺点
WebServer在接收到请求时,会先fork出CGI进程,而后处理请求,处理完后结束这个进程,这就是 fork-and-execute 模式。因此用 CGI 方式的服务器有多少链接请求就会有多少 CGI 进程,每一个进程都会加载解析PHP配置,初始化执行环境,那么当高并发请求时,会大量挤占系统的资源如内存,CPU 时间等,形成效能低下。并发
PHP-CGI是php的CGI程序,不进行进程管理编程语言
一. FastCGI的简介
FastCGI是Web服务器和处理程序之间通讯的一种协议, 是CGI的一种改进方案,FastCGI像是一个常驻(long-lived)型的CGI, 它能够一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。 正是由于他只是一个通讯协议,它还支持分布式的运算,因此 FastCGI 程序能够在网站服务器之外的主机上执行,而且能够接受来自其它网站服务器的请求。分布式
FastCGI 是与语言无关的、可伸缩架构的 CGI 开放扩展,将 CGI 解释器进程保持在内存中,以此得到较高的性能。 CGI 程序反复加载是 CGI 性能低下的主要缘由,若是 CGI 程序保持在内存中并接受 FastCGI 进程管理器调度, 则能够提供良好的性能、伸缩性、Fail-Over 特性等。高并发
二. FastCGI工做流程
FastCGI 与传统 CGI 模式的区别之一则是 Web 服务器不是直接执行 CGI 程序了,而是经过 Socket 与 FastCGI 响应器(FastCGI 进程管理器)进行交互,也正是因为 FastCGI 进程管理器是基于 Socket 通讯的,因此也是分布式的,Web 服务器能够和 CGI 响应器服务器分开部署。Web 服务器须要将数据 CGI/1.1 的规范封装在遵循 FastCGI 协议包中发送给 FastCGI 响应器程序。