CGI/FASTCGI/ISAPI区别

一 CGI原理及其性能

1) CGI概念
CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序链接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。

2)CGI程序语言
事实上,任何一种程序语言,只要能在服务器主机上利用CGI接口来编写应用程序,均可以叫做CGI程序语言。目前最为流行的CGI程序语言有四种:C,Shell,Perl和VisualBasic,其它一些语言也有许多人在用,如TCL,Fortran及AppleScript等。

3)CGI程序的执行
CGI 程序通常是个可执行程序。编译好的CGI程序通常要集中放在一个目录下。具体存放的位置随操做系统的不一样而不一样。CGI程序的执行通常有两种调用方式:第一种是经过URL直接调用,如:“http://202.114.2.182/cgi-win /cgi.exe”,在浏览器的URL栏里直接写入上述描述就能够调用该程序;另外一种方式,也是主要的方式,是经过交互式主页里的FORM栏调用,一般都是用户在填完一张输入信息Form后按确认按钮启动CGI程序。

4)CGI工做的主要流程
CGI工做的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页里用户输入信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询〕;4.将服务器处理结果经过HTML文件返回给用户;5.CGI进程结束。

5)CGI的性能评价
CGI 的跨平台性能极佳,几乎能够在任何操做系统上实现,如DOS、WINDOWS、UNIX、OS/二、Macintosh等。实现CGI的编程语言也有不少选择。CGI的应用程序通常都是一个独立的可执行程序,和WWW服务器各自占据着不一样的进程,并且通常一个CGI程序只能处理一个用户请求。这样,每有一个用户请求,都会激活一个CGI进程,当用户请求数量很是多时,会大量挤占系统的资源如内存,CPU时间等,形成效能低下。


二 ISAPI原理及其性能

1)ISAPI概念
ISAPI即Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口,它能实现CGI能提供的所有功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI 服务器扩展是能够被 HTTP 服务器加载和调用的 DLL。Internet 服务器扩展也称为 Internet 服务器应用程序 (ISA),用于加强符合 Internet 服务器 API (ISAPI) 的服务器的功能。ISA 经过浏览器应用程序调用,而且将类似的功能提供给通用网关接口 (CGI) 应用程序。

2)ISAPI程序语言
因为开发ISAPI应用要用到微软的一套API,因此能用来开发ISAPI应用的语言不如CGI那么多。主要有VisualC++4.1以上版本,VisualBasic5.0、BorlandC++5.0也能够。

3)ISAPI原理
ISAPI 的工做原理和CGI大致上是相同的,都是经过交互式主页取得用户输入信息,而后交服务器后台处理。可是两者在实现机制上大相庭径。ISAPI与CGI最大的区别在于:不一样于CGI,在ISAPI下创建的应用程序是以动态链接库的形式存在;而CGI的应用程序通常都是可执行程序。

4)ISAPI程序的执行
ISAPI 应用的工做流程与CGI有一些不一样。ISAPI应用的DLL不只能够象CGI程序同样被用户请求激活,还能够被系统预先激活来监视用户输入;对于被用户激活的DLL,在处理完一个用户请求后不会立刻消失,而是继续驻留在内存中等待处理别的用户输入,直到过了一段时间后一直没有用户输入。

5)5ISAPI性能评价
一个ISAPI的DLL,能够在被用户请求激活后长驻内存,等待用户的另外一个请求,还能够在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。不过ISAPI的平台兼容性较差,目前只能用于微软本身的Windows95和NT操做系统上,服务器平台也仅限于 IIS(InternetInformationServer)和MSpersonalwebserver以及NTworkstation上的 peerwebserver。
6)ISAPI 筛选器是什么?
ISAPI 筛选器是在启用 ISAPI 的 HTTP 服务器上运行的 DLL,用以筛选与服务器之间来回传送的数据。该筛选器注册事件的通知,例如登陆或 URL 映射。当发生选定事件时,筛选器被调用,而且您能够监视及更改数据(在数据从服务器传输到客户端或相反的过程当中)。可使用 ISAPI 筛选器提供加强的 HTTP 请求记录(例如,跟踪登陆到服务器的用户)、自定义加密、自定义压缩或其余身份验证方法。
7)ISAPI 服务器扩展和筛选器之间的区别是什么?
服务器扩展:在 URL 中引用时运行。被显式调用,例如用 http://myserver/myprog.dll?。被用户第一次调用时根据请求加载。
筛选器:为服务器处理的每一个 URL 调用。若是发生已注册事件,自动为任何发送到服务器的 URL 运行。服务因其注册表项而启动时加载。     
     
服务器扩展和筛选器都:* 共享服务的处理空间。* 必须是线程安全的。* 一经加载便保留在内存中(直到服务中止或者内存被其余进程所须要)。


三 ISAPI与CGI有哪些相同和不一样之处?

ISAPI 服务器扩展为使用 Internet 服务器的通用网关接口 (CGI) 应用程序提供了另外一种选择。与 CGI 应用程序不一样,ISAPI 在 HTTP 服务器所在的同一地址空间运行,而且能够访问可由 HTTP 服务器使用的全部资源。ISA 的系统开销比 CGI 应用程序低,由于它们不要求建立其余进程,也不执行须要越过进程边界的通讯,而这种通讯很是耗时。若是内存被其余进程所须要,扩展和筛选器 DLL 均可能被卸载。

Internet客户端经过HTTP服务器调用ISAPI的方法与调用CGI应用程序的方法同样。例如,客户端能够这样调用一个 CGI 应用程序:http://sample、example.exe?Param1&Param2,它能够这样调用一个执行相同功能的 ISAPI:http://sample/example.dll?Param1&Param2。ISAPI 容许在一个DLL中有多个命令,这些命令做为DLL中CHttpServer 对象的成员函数来实现。CGI要求每一个任务有一个单独的名称和一个到单独的可执行文件的URL映射。每一个新的CGI请求启动一个新进程,而每一个不一样的请求包含在各自的可执行文件中,这些文件根据每一个请求加载和卸载,所以系统开销高于ISA。

ISAPI 筛选器没有等效的 CGI 筛选器。筛选器提供预处理和后处理在客户端和服务器之间发送的全部数据的能力。
FastCGI
         1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它能够一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
  2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块可供使用,阿帕契 (Apache,以及利用 Apache 衍生出作的服务器) 上也有 mod_fastcgi 可用。
  3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序语言。
  4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也能够当成 CGI 来执行。
  5. 现有的 CGI 程序要改写成 FastCGI 很是简单,最少可能只须要多加入三行程序代码。
  6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,便可在命令列模式执行或侦错。
  7. FastCGI 应用程序的写做方式与 CGI 相似,除了几项原则要特别注意外,FastCGI 的写做方式跟 CGI 几乎同样,与学习 Web Server API 比较起来, FastCGI 简单多了。
  8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序能够在网站服务器之外的主机上执行而且接受来自其它网站服务器来的请求。
PHP的FastCGI使你的全部php应用软件经过mod_fastci运行,而不是mod_phpsusexec。FastCGI应用速度很快 是由于他们持久稳定。没必要对每个请求都启动和初始化。这使得应用程序的开发成为可能,不然在CGI范例是不切实际的(例如一个大型的脚本,或者一个须要 链接单个或多个数据库的应用)。
好处
  1. PHP脚本运行速度更快(3到30倍)。PHP解释程序被载入内存而不用每次须要时从存储器读取,极大的提高了依靠脚本运行的站点的性能。
  2. 须要使用更少的系统资源。因为服务器不用每次须要时都载入PHP解释程序,你能够将站点的传输速度提高很高而没必要增长cpu负担。
  3. 不须要对现有的代码做任何改变。现有的一切都适用于PHP的FastCGI
潜在问题
      • 对全部的子目录(/home/USERNAME/public_html/php.ini)你只有一个可用的php.ini文件。 这是优化网站代码所必需的。若是你须要多个php.ini文件以适应不一样的脚本须要,你能够在任何子目录禁用PHP的快速CGI,而其他的地方则继续有 效。若是你须要这样作请联系support。
      • 你对PHP环境作的任何升级(如php.ini文件的改变)都有几分钟的延迟。这是由于为了更快的速度 你的php.ini文件已经被载入内存,而不是每次须要时再从存储器从新读取。
相关文章
相关标签/搜索