一、官方简介
1、关于FastCGI
FastCGI很简单而仅仅是CGI的扩展:
(1)跟CGI一样,FastCGI也是语言独立的。比如:FastCGI可以用Perl编写应用来提高Web服务器的性能。
(2)跟CGI一样,FastCGI独立于核心Web服务之外运行应用进程,相比提供API接口来说更具安全性。(API将应用程序代码嵌入到核心Web服务器,这意味着应用程序的一个bug会导致其它应用程序或者核心服务被破坏,比如:一个恶意的API应用程序从另一个应用程序或者核心服务器窃取安全密钥。)
(3)尽管FastCGI不可能一夜之间普遍替代CGI,但是FastCGI开发者致力于将其作为一种开放标准,并为流行免费的服务器(Apache、IIS、Lighttpd)提供各种免费的FastCGI应用库(C/C++、Java、Perl、Tcl)和升级模块。
(4)跟CGI一样,FastCGI不会绑定到任何Web服务器体系结构内部,因此,无论服务器技术如何改变都保持稳定,Web服务器体系结构的改变仅仅影响到其提供的API。
2、FastCGI不仅仅是CGI的增强,其还增加了两个好处:
(1)分布式计算:可以将FastCGI应用程序和Web服务器分别部署在不同机器上,分布式计算是一种用于提高现有系统可伸缩性的成熟技术,提高系统的可用性,通过防火墙提高系统安全性。
(2)多个和可扩展的角色:CGI应用程序在一个HTTP request中计算response,FastCGI应用程序可以做比这更多的事情,比如执行身份认证和授权检查、转换数据格式等,FastCGI未来还会增加更多角色。
3、在FastCGI上开发:
在FastCGI上不需要做很多开发,因为其是一个非常稳定的protocol/application。
关于FastCGI的更多信息请参看。
上面这段描述非常蹩脚,关于CGI和FastCGI的纠葛之通俗解释请看后文。
二、通俗简介
1、CGI简介
CGI全称是Common Gateway Interface,即公共网关接口,CGI使外部程序与Web服务器之间交互成为可能,CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量即可,比如php,perl,tcl等。
CGI程序运行在独立的进程中,并对每个Web请求fork一个进程,请求处理完后结束进程,周而复始,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源的重用。
2、FastCGI简介
FastCGI全称是“Fast Common Gateway Interface,即快速通用网关接口,是一种让交互程序与Web服务器通信的协议,FastCGI是早期通用网关接口(CGI)的增强版本,FastCGI致力于减少Web服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的Web请求。
与CGI为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求,这些进程由FastCGI服务器管理,而不是Web服务器,当进来一个请求时,Web服务器把环境变量和这个页面请求通过一个UNIX socket比如FastCGI进程与Web服务器都位于本地)或者一个TCP connection(FastCGI进程在远端的server farm)传递给FastCGI进程。
3、FastCGI处理流程
(1)Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)。
(2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
(3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
阅读(3112) | 评论(1) | 转发(0) |