Fastcgi是什么

  一、FastCGI是什么?
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要 行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存 中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。

  FastCGI的官方站点在http://www.fastcgi.com

  FastCGI的工作原理是:

  1、Web Server 启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module);

  2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。

  3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。

  4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。

  在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

  二、为什么要使用FastCGI,而不是多线程CGI解释器?
这可能出于多方面的考虑,例如:

  1、你无论如何也不能在windows平台上稳定的使用多线程CGI解释器,无论是IIS ISAPI方式还是APACHE Module方式,它们总是运行一段时间就崩溃了。奇怪么?但是确实存在这样的情况!

  当然,也有很多时候你能够稳定的使用多线程CGI解释器,但是,你有可能发现网页有时候会出现错误,无论如何也找不到原因,而换用FastCGI方式时 这种错误的概率会大大的降低。我也不清楚这是为什么,我想独立地址空间的CGI解释器可能终究比共享地址空间的形式来得稳定一点点。

  2、性 能!性能?可能么,难道FastCGI比多线程CGI解释器更快?但有时候确实是这样,只有测试一下你的网站,才能最后下结论。原因嘛,我觉得很难讲,但 有资料说在Zend WinEnabler的时代,Zend原来也是建议在Windows平台下使用FastCGI而不是IIS ISAPI或Apache Module,不过现在Zend已经不做这个产品了。

  三、不使用FastCGI的理由
1、多进程比多线程消耗更多的服务器内存,php-cgi.exe解释器每进程消耗7至25兆内存,将这个数字乘以50或100试试。

  2、性能。确实有时候多线程CGI解释器更快,呵呵,而且有时候,它也很稳定。

时间: 2024-09-15 20:31:42

Fastcgi是什么的相关文章

Windows 下 Apache 1.3 以 FastCGI 模式运行 PHP

我一直以来都是以 ISAPI 模式运行 php(做为现在的主流开发语言) 的,这种方式最大的缺点就是稳定性不好,当 php(做为现在的主流开发语言) 出错的时候,apache(Unix平台最流行的WEB服务器平台)进程也死掉了.后来看到网上关于 php(做为现在的主流开发语言) 以 Fastcgi(现在已经不多人在用了) 模式运行的介绍,其中提到的种种好处(稳定.安全.高性能)让我决定尝试一下. 不过事情远不如预计的那么顺利.Google 了无数次也没找到一篇如何在 Windows 下用 apa

IIS下PHP的ISAPI和FastCGI比较

在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1.CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求.这样,当用户请求数量非常多时,会大量占用系统的资源,如内存.CPU时间等,造成效能低下. 2.ISAPI(Inte

Nginx与PHP(FastCGI)的安装、配置与优化

FastCGI的介绍和工作原理 首先简单的介绍下FastCGI:   FastCGI是语言无关的.可伸缩结构的CGI开放扩展,其主要行为是将CGI解释器进行保持在内存中并因此获得较高的性能.众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能.伸缩性.Fail-Over特性等.   FastCGI的工作原理是:   (1)FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程

使用fastcgi

很久以前在国外服务器上挖了个坑,说nginx的fastcgi_cache是被大家忽视的一大金矿,今天把这个坑填上,顺祝大家新年快乐. 对于变化不太频繁的数据,大家都比较喜欢存Memcached以减少数据库的读取,但还是会有语言解析运行上的消耗(比如运行PHP,Python等),当然这个时间很短,记得OP上有个同学说P字头的语言,效率都不高,如果能省去,当然最好.(已经用上Squid等的可以忽略本文). 还有一个问题就是很多时候一个页面由多个数据片断组成,为了提高页面速度,要么分别缓存,要么整体缓

Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程

说到PHP环境配置与安装,通常以Apache搭载PHP配置为主,随着PHP版本不断更新,对Windows IIS平台的支持也越来越好,在Windows IIS平台上配置安装PHP环境也越来越方便. 在完成Windows 7上搭建Apache+PHP+Mysql环境搭建后,我在Windows 7 IIS7平台上对PHP5.2和PHP5.3进行了配置安装,PHP5.3之前版本在Windows IIS平台上的PHP配置方式主要以ISAPI方式进行,而PHP5.3支持IIS以FastCgi方式运行PHP

PHP+Lighttpd+FastCGI的安装

1. php安装 tar zxf php-5.3.2 –C /usr/src cd /usr/src/php-5.3.2  ./configure --prefix=/usr/local/php5 --enable-force-cgi-redirect --enable-fastcgi  make;make install  cp php.ini.dist /etc/php.ini  cd /usr/local/php5/bin  ./php-cgi –b 127.0.0.1:9999 2.pc

windows 2008中IIS 7.5环境下配置Fastcgi模式PHP

最近正在熟悉windows主机web环境的搭建,今天又遇到了iis整合php出现500错误的问题,于是网上寻找教程来顺便将问题解决了,这里和大家分享一下. 1.在安装iis时,要选中CGI脚本. 步骤为:通过control panel(控制面板)->turm windows feature or not(windows管理中心)->role(角色)->add role(增加角色)->选中iis.Iis下面的world wide web中CGI项要选中. 2.打开"处理程序

Nginx与PHP(FastCGI)的安装、配置与优化

一.什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTTP server都支持FastCGI,包括Apache.Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP. FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发访问时,几乎是不可用

高并发服务器的设计:fastcgi的设计

服务器开发中不何或缺的要使用fastcgi,其使用方法如下: while( FCGI_Accept() >= 0 ){ printf( "Content-type: text/plain \r\n" "Content-Length: %d\r\n" "Connection: close\r\n\r\n%s\r\n", strlen( buffer ), buffer ); } facgcgi 头文件有如下宏: #undef fprintf

apache的fastcgi配置导致的故障

[Tue Jan 10 13:54:30 2012] [alert] [client 192.168.1.200] (13)Permission denied: FastCGI: failed to connect to (dynamic) server "/var/www/extsuite/extmail/cgi/index.cgi": something is seriously wrong, any chance the socket/named_pipe directory w