fastcgi 订阅
FastCGI
信息
操作系统
跨平台
开发语言
C/C++
开源协议
未知
FastCGI
fastcgi 这个技术标准作为一种替代 cgi 的技术标准, fastcgi 有如下优点(稳定,安全,高性能,方便扩展) 从稳定性上看, fastcgi 是以独立的进程池运行来 cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑. 从安全性上看, fastcgi 和宿主的 server 完全独立, fastcgi 怎么 down 也不会把 server 搞垮, 从性能上看, fastcgi 把动态逻辑的处理从 server 中分离出来, 大负荷的 IO 处理还是留给宿主 server, 这样宿主 server 可以一心一意作 IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态 IO 处理完全不需要逻辑程序的参与 从扩展性上讲, fastcgi 是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)
收起全文
精华内容
下载资源
问答
  • FastCGI

    千次阅读 2014-10-08 11:48:47
    Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。 FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。 ...
    快速通用网关接口Fast Common 
    Gateway 
     Interface/
    FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期
    通用网关接口(CGI)的增强版本。 
    

    FastCGI致力于减少网页服务器CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。

    历史[编辑]

    CGI使外部程序与Web服务器之间交互成为可能。CGI程序运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。

    实现[编辑]

    与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI服务器管理,而不是web服务器。 当进来一个请求时,web服务器把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器(都位于本地)或者一个TCP connection(FastCGI进程在远端的server farm)传递给FastCGI进程。

    使用FastCGI的网页服务器[编辑]

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    FastCGI开发者套件
     
     

    FastCGI开发者套件

    Mark R. Brown
    Open Market, Inc.

    文档版本:1.08
    1996年6月11日

    Copyright © 1996 Open Market, Inc. 245 First Street, Cambridge, MA 02142 U.S.A.
    Tel: 617-621-9500 Fax: 617-621-1703 URL: http://www.openmarket.com/
    $Id: fcgi-devel-kit.htm,v 1.6 2002/02/25 00:42:59 robs Exp $


    1. 介绍

    FastCGI是对CGI的开放的扩展,它为所有因特网应用提供高性能,且没有Web服务器API的缺点(penalty)。

    FastCGI被设计置于现存的Web服务器API之上。例如,Apache模块mod_fastcgi向Apache服务器添加FastCGI支持。FastCGI也能用在任何支持CGI的Web服务器上,只有简化的功能和下降的性能。

    本FastCGI开发者套件被设计用来使得开发FastCGI应用更容易。当前套件支持用C/C++、Perl、Tcl和Java编写的FastCGI应用。

    本文档:

    • 描述如何为你的开发平台配置和构建套件。
    • 讲述如何使用套件中的库编写应用。
    • 讲述如何利用支持FastCGI的Web服务器运行应用,或者利用任何Web服务器和cgi-fcgi

    套件中包含技术白皮书doc/fastcgi-whitepaper/fastcgi.htm。在开始编写FastCGI应用以前,你应当至少阅读技术白皮书的前三章。性能论文将帮助你理解带FastCGI的应用设计如何影响性能。

    FastCGI规范doc/fcgi-spec.html,定义FastCGI应用和支持FastCGI的Web服务器之间的接口。套件中的软件实现了该规范。编写应用不需要阅读规范。

    FAQ文档中提供了附加信息,它包括与利用FastCGI的应用开发有关常见问答,还有一些一般性信息。

    对于编写FastCGI应用,CGI编程经验是极有价值的。如果你没有足够的CGI编程经验,你应当阅读一本关于该主题的普及书籍,或者学习NCSA CGI页。CGI/1.1的更正式的论述见因特网CGI 1.1规范草案

    2. 入门指南

    套件是个压缩的tar(tar.Z)文件,通过fastcgi.comWeb页分发。解包该tar文件会创建一个新目录fcgi-devel-kit

    使用Web浏览器的“打开文件”命令打开套件的索引页,fcgi-devel-kit/index.html。索引页给你套件结构的纵览,并帮助你游览套件。索引页也包括运行示例应用的链接,但是当利用“打开文件”命令打开index.html时,应用不会工作,因为它们不是通过Web服务器访问的。

    为了 in earnest 地使用套件,你将需要一个由自己控制的Web服务器,一个以你的用户ID运行的Web服务器。Web服务器会启动你要调试的FastCGI应用;如果这些 进程以你的用户ID运行,将带给你极大的方便。最好拥有支持FastCGI的Web服务器。第4章论述Web服务器问题。

    如果可以,把套件保存在从你的个人工作站可存取的文件系统上,在你的工作站上执行构建并在其上运行你的Web服务器。如果不行,调整配置以使套件从你的 Web服务器的机器可存取,并在某机器上构建套件和你的应用,该机器的配置方式同你的Web服务器完全一样。

    要构建套件,在fcgi-devel-kit目录中执行该命令序列:

        % ./configure
        % make
    

    我们已经在这些平台上构建和应用了套件(以字母顺序列出):

    • BSD/OS 1.1 (Intel Pentium), gcc
    • Digital UNIX V3.2 148 (Alpha), gcc/cc
    • Hewlett-Packard HP-UX A.09.05 C and B.10.01 A (PA-RISC), gcc/cc
    • IBM AIX 1 4 (RS/6000), gcc
    • Silicon Graphics IRIX 5.3 11091812 (MIPS), gcc
    • Sun Solaris 2.4 and 2.5 (SPARC), gcc/cc
    • Sun SunOS 4.1.4 (SPARC), gcc

    一旦构建了套件,就可依据第4章中的说明 bring up 你的Web服务器并运行示例应用。

    3. 编写应用

    3.1 使用fcgi_stdio

    fcgi_stdio库为C CGI程序和程序员提供到FastCGI的最轻松的过渡。利用该库,你的应用既可用CGI运行,也可用FastCGI,这两种情况使用相同的库。

    我们给出一对例子来介绍fcgi_stdio库:一个微型CGI程序和该程序向FastCGI的迁移。这两个示例程序被包括在套件中。

    CGI程序是examples/tiny-cgi.c

        #include <stdio.h>
        #include <stdlib.h>
    
        void main(void)
        {
            int count = 0;
            printf("Content-type: text/html\r\n"
                   "\r\n"
                   "<title>CGI Hello!</title>"
                   "<h1>CGI Hello!</h1>"
                   "Request number %d running on host <i>%s</i>\n",
                   ++count, getenv("SERVER_NAME"));
        }
    

    该微型CGI程序的主要特性是:

    • 在该例中,程序通过用printf写入stdout来向Web服务器发送数据。CGI程序首先发送Content-type报头,然后发送一个小型的HTML文档。程序包含stdio.h以便访问printf函数。
    • 程序通过读取环境变量来获得Web服务器提供的参数。CGI程序利用getenv读取SERVER_NAME变量,并把其值包含在HTML文档中。程序包含stdlib.h以便访问getenv函数。

    本例中的count变量退化了;CGI程序执行单个请求,所以请求数总是1。在FastCGI例子中该变量会更有意思。

    相应的FastCGI是examples/tiny-fcgi.c

        #include "fcgi_stdio.h"
        #include <stdlib.h>
    
        void main(void)
        {
            int count = 0;
            while(FCGI_Accept() >= 0)
                printf("Content-type: text/html\r\n"
                       "\r\n"
                       "<title>FastCGI Hello!</title>"
                       "<h1>FastCGI Hello!</h1>"
                       "Request number %d running on host <i>%s</i>\n",
                        ++count, getenv("SERVER_NAME"));
        }
    

    该微型FastCGI程序的主要特性是:

    • 程序构造为通过调用函数FCGI_Accept开始的循环。在新请求到达前FCGI_Accept函数一直阻塞程序的执行。程序包含fcgi_stdio.h以便访问FCGI_Accept函数。
    • 在循环内部,FCGI_Accept创建一个CGI兼容的世界。printfgetenv操作恰如CGI程序中一样。本微型程序没用到的stdinstderr操作也恰如CGI程序中一样。

    每次通过循环,count变量都递增,所以每次程序都显示不同的请求数。一旦你已经构建并运行,你可用浏览器中的刷新按钮示范这一点。

    构建程序

    如果你能构建examples/tiny-cgi.c,则构建examples/tiny-fcgi.c对你来说将会很容简单。你需要:

    • 把含有fcgi_stdio.h头文件的目录加入编译器的包含搜索路径。套件调用该目录的include
    • 把库libfcgi.a加入链接器的命令行,以便链接时它会被搜索。libfcgi.a库实现了在fcgi_stdio.h中定义的函数。套件访问含有该libfcgi库的目录。
    • 确定你的平台上的链接器是否缺省搜索伯克利socket库,并且如果不是,则增加链接器指令强制这种搜索。

    构建这两个程序的Makefile可见examples/Makefile(由configure创建)。Autoconf处理平台依赖的链接问题;要知道如何做的,分析configure.inexamples/Makefile.in

    运行程序

    第4章全都是关于如何运行FastCGI应用的。

    你能用CGI运行同fcgi_stdio库一起构建的应用程序。FCGI_Accept函数测试其环境以确定应用是如何被调用的。如果是作为CGI程序被调用,则首次访问FCGI_Accept实际上是个空操作,而且第二次访问返回-1。结果是请求循环消失了。

    当然,当FastCGI应用使用CGI运行时,它得不到FastCGI的好处。例如,应用在给单个请求提供了服务后退出,这样它不能维持缓存的信息。

    实现细节

    fcgi_stdio.h首先包含stdio.h,然后定义宏以替换原来在stdio.h中定义的所有类型和例程,通过这种方式起作用。(stdio.h定义了几个与FILE *无关的例程,例如sprintfsscanffcgi_stdio.h不会替换它们。)例如,FILE变成FCGI_FILEprintf 变成FCGI_printf。如果阅读fcgi_stdio.h或者在预处理后分析C源代码,你将只看到这些新名字。

    这种实现技术的一些结果是:

    • 在一些平台上,如果你在包含fcgi_stdio.h之后包含stdio.h,执行将会中断,因为stdio.h常常为函数定义类似getcputc的宏。幸运的是,在多数平台上,stdio.h通过靠近文件顶部的行实施保护以防多次包含,这些行看起来像
          #ifndef _STDIO_H
          #define _STDIO_H
      
      

      用于多次包含防护的特殊符号,本例中是_STDIO_H,因平台而异。只要你的平台针对多次包含对stdio.h进行保护,你就能不管这个问题。

    • 如果你的应用传递FILE *到库中实现的函数中,且你有库的源代码,则你会想要包含fcgi_stdio.h重新编译这些库。多数C编译器提供命令行选项用于在将要编译的程序中包含头文件;使用这样的编译器特性允许你不改变源码来重建你的库。例如gcc命令行
          gcc -include /usr/local/include/fcgi_stdio.h wonderlib.c
      
      

      促使gcc在读取模块wonderlib.c以前就包含fcgi_stdio.h

    • 如果你的应用传递FILE *到库中实现的函数中,但你没有库的源代码,则你需要在包含fcgi_stdio.h以前为这些库包含头文件。你不能向库实现的任何函数传递FCGI_Accept产生的stdinstdoutstderr流。你能向库函数传递Unix文件流,只要遵循这个模式:
          FILE *myStream = fopen(path, "r");
          answer = MungeStream(FCGI_ToFile(myStream));
      
      

      这里的MungeStream是你不能重新编译的库函数,FCGI_ToFile是把FCGI_FILE *转换为FILE *的宏。宏FCGI_ToFilefcgi_stdio.h中定义。

    转换CGI程序

    把CGI程序转换为FastCGI程序的主要任务是分离代码,从每次请求都需要运行的代码中分离出只需要执行一次的初始化程序的代码。在我们的微型例子中,初始化count变量在循环外面,而递增count变量在内部。

    保持应用状态可能是个问题。你必须确保在处理一个请求中创建的任何应用状态不会无意识地影响后来的请求。FastCGI通过缓存提供有效的应用性能提升的可能;让缓存正确地运转取决于你。

    内存泄漏可能是个问题。很多CGI程序不用担心内存泄漏,因为程序不会运行足够长的时间使之膨胀到构成问题。当转换到FastCGI时,你能使用类似Purify的工具从纯软件(Pure Software)来发现和修正内存泄漏,也能从Geodesic系统(Geodesic System)运行类似Great Circle的C垃圾收集器。

    局限

    当前fcgi_stdio库提供的兼容性存在一些限制:

    • 该库没提供FastCGI版本的函数fscanfscanf。如果你要把fscanfscanf应用到FastCGI程序的stdin上,工作区将会读取行或其他自然的单元到内存中,然后调用sscanf。如果你要把fscanf应用到Unix文件流,工作区将遵循模式:
          FILE *myStream = fopen(path, "r");
          count = fscanf(FCGI_ToFile(myStream), format, ...);
      
      

    参考文献

    FCGI_Accept man页doc/FCGI_Accept.3以传统形式描述了该函数。

    FCGI_Finishdoc/FCGI_Finish.3),FCGI_SetExitStatusdoc/FCGI_SetExitStatus.3)和FCGI_StartFilterDatadoc/FCGI_StartFilterData.3)man页阐释了没有在上面说明的fcgi-stdio库的能力。

    3.2 使用fcgiapp

    fcgiapp库是FastCGI的第二个C库。它不提供fcgi_stdio那样高度的源代码兼容性;作为回报,它没有大量地使用#definefcgi_stdio实现为fcgiapp之上的薄层。

    使用fcgiapp库构建的应用不能作为CGI程序运行;那个特性在fcgi_stdio层提供。

    fcgiapp中定义的函数使用前缀FCGX_命名,而不是FCGI_。例如,FCGX_Acceptfcgiapp版的FCGI_Accept

    fcgiapp库的文档采取在头文件include/fcgiapp.h中的大量的注释的形式。示例程序examples/tiny-fcgi2.cexamples/echo2.c示范如何使用fcgiapp

    3.3 使用Perl和Tcl

    A major advantage of the FastCGI approach to high-performance Web applications is its language-neutrality. CGI scripts written in popular languages such as Perl and Tcl can be evolved into high-performance FastCGI applications.

    We have produced FastCGI-integrated Perl and Tcl interpreters. Doing so was easy, since Perl and Tcl are conventional C applications and fcgi_stdio was designed for converting conventional C applications. Essentially no source code changes were required in these programs; a small amount of code was added in order to make FCGI_Accept and other FastCGI primitives available in these languages. And because these interpreters were developed using fcgi_stdio, they run standard Perl and Tcl applications (e.g. CGI scripts) as well as FastCGI applications.

    See the fastcgi.com Web page for more information about the Perl and Tcl libraries.

    Here are the Perl and Tcl versions of tiny-fcgi:

    #!./perl
    use FCGI;
    $count = 0;
    while(FCGI::accept() >= 0) {
        print("Content-type: text/html\r\n\r\n",
              "<title>FastCGI Hello! (Perl)</title>\n",
              "<h1>FastCGI Hello! (Perl)</h1>\n";
              "Request number ",  ++$count,
              " running on host <i>";$env(SERVER_NAME)</i>");
    }
    
    #!./tclsh
    set count 0 
    while {[FCGI_Accept] >= 0 } {
        incr count
        puts -nonewline "Content-type: text/html\r\n\r\n"
        puts "<title>FastCGI Hello! (Tcl)</title>"
        puts "<h1>FastCGI Hello! (Tcl)</h1>"
        puts "Request number $count running on host <i>$env(SERVER_NAME)</i>"
    }
    

    Converting a Perl or Tcl CGI application to FastCGI is not fundamentally different from converting a C CGI application to FastCGI. You separate the portion of the application that performs one-time initialization from the portion that performs per-request processing. You put the per-request processing into a loop controlled byFCGI::accept (Perl) or FCGI_Accept (Tcl).

    3.4 使用Java

    Java不只适合于基于浏览器的小程序片。它已然适合编写一些Web服务器应用,而且随着Java编译器和其他Java工具的改进,它的应用范围将会增长。Java的模块、垃圾收集和线程对于编写常驻的应用服务器尤其有价值。

    FCGIInterface类给Java应用提供设施,就像fcgi_stdio为C应用提供的那样。使用该库,你的Java应用能利用CGI或FastCGI运行。

    套件中包括关于结合Java和FastCGI的独立的自带文档。FastCGI的源代码包含在目录java/src中,已编译代码在java/classes中。

    这是Java版的tiny-fcgi

    import FCGIInterface;
    
    class TinyFCGI { 
        public static void main (String args[]) {  
            int count = 0;
            while(new FCGIInterface().FCGIaccept()>= 0) {
                count ++;
                System.out.println("Content-type: text/html\r\n\r\n");
                System.out.println(
                        "<title>FastCGI Hello! (Java)</title>");
                System.out.println("<h1>FastCGI Hello! (Java)</h1>");
                System.out.println(
                        "request number " + count + " running on host <i>" +
                        System.getProperty("SERVER_NAME") + "</i>");
            }
        }
    }
    

    4. 运行应用

    4.1 使用支持FastCGI的Web服务器

    当前支持FastCGI的Web服务器的列表见fastcgi.com网页。

    一些支持FastCGI的Web服务器执行FastCGI应用的管理。你不需要启动和停止FastCGI应用;Web服务器会照看它。如果应用进程崩溃了,Web服务器重启它。

    Web服务器通过新的配置指令支持FastCGI。由于这些指令是特定于服务器的,从每种服务器自带的文档获得更多信息。

    4.2 在任何Web服务器上使用cgi-fcgi

    程序cgi-fcgi允许你利用任何支持CGI的Web服务器运行FastCGI应用。

    这里是cgi-fcgi如何运转的。cgi-fcgi是使用Unix域或TCP/IP socket与FastCGI应用通信的标准CGI程序。cgi-fcgi接受路径名或正监听的socket的主机/端口名为参数,并且连接到在那个socket上监听的FastCGI。然后cgi-fcgi把CGI环境变量和stdin数据转送到FastCGI应用,并把stdoutstderr数据从FastCGI应用转送到Web服务器。当FastCGI应用通知响应结束时,cgi-fcgi刷新其缓冲器并退出。

    很显然,cgi-fcgi不如集成了FastCGI支持的服务器:

    • 通信比避免了每次FastCGI请求都fork/exec的Web服务器要慢。
    • cgi-fcgi不会执行应用管理,你需要自己提供。
    • cgi-fcgi只支持响应角色。

    但是cgi-fcgi允许你开发这样的程序,它们在连接之间在内存中保持状态,这样做常常提供了超过常规的CGI的主要性能提升。而且你开发的使用cgi-fcgi的所有应用将能与集成了FastCGI支持的Web服务器合作。

    在案例examples/tiny-fcgi应用中,文件examples/tiny-fcgi.cgi示范一种用cgi-fcgi运行典型的应用的方式:

        #!../cgi-fcgi/cgi-fcgi -f
        -connect sockets/tiny-fcgi tiny-fcgi
    

    在多数Unix平台上,执行本命令解释器文件会以-fexamples/tiny-fcgi.cgi为参数运行cgi-fcgi。(注意:在一些Unix平台上,包括HP-UX,命令解释器文件的第一行不能含有超过32个字符,包括换行符在内;你可能需要在类似/usr/local/bin的标准位置安装cgi-fcgi应用,或者在含有你的应用的目录中创建到cgi-fcgi的符号连接。)cgi-fcgi程序读取本命令解释器文件并连接其监听的socket为examples/sockets/tiny-fcgi的FastCGI应用。

    继续这个例子,如果cgi-fcgi的连接尝试失败了,它创建一个新进程来运行程序examples/tiny-fcgi并监听socketexamples/sockets/tiny-fcgi。然后cgi-fcgi重新进行连接尝试,现在应该会成功。

    cgi-fcgi程序还有两种操作方式。其中一种它连接到应用但是不启动它们;另一种它启动应用但是不连接它们。当使用TCP/IP时这些方式是必需的。cgi-fcgi man页doc/cgi-fcgi.1,告讲述全部情况。

    要用cgi-fcgi运行示例应用,启动你的Web服务器并给它fcgi-devel-kit目录为其URL空间的根。如果运行你的Web服务器的机器称为bowser,并且你的服务器运行在端口8888上,你当打开URL http://bowser:8888/index.html以到达套件的索引页。现在索引页上通过cgi-fcgi运行示例应用的链接应该是有效的。

    5. 已知的问题

    On Digital UNIX 3.0 there's a problem with Unix domain listening sockets on NFS file systems. The symptom when using cgi-fcgi is an exit status of 38 (ENOTSOCK: socket operation on non-socket), but cgi-fcgi may dump core in this case when compiled optimized. Work-around: Store your Unix domain listening sockets on a non NFS file system, upgrade to Digital UNIX 3.2, or use TCP sockets.

    On AIX there's a problem with shared listening sockets. The symptoms can include application core dumps and kernel panic. Work-around: Run a single FastCGI application server per listening socket.

    6. 获得支持

    邮件列表fastcgi-developers用于开发FastCGI应用中的问题的讨论。其主题包括支持FastCGI的Web服务器或它们的变更的公告,新应用库或它们的变更的公告,已知bug的公告,FastCGI应用编程中的设计折衷方案的讨论,以及开发计划和经验的讨论。要加入列表,参阅http://fastcgi.com/fastcgi-developers

    在FastCGI主页http://www.fastcgi.com上有邮件存档的链接。

     

     

    展开全文
  • fastcgi

    2011-09-08 08:26:41
    fastcgi 目录 什么是CGI什么是FastCGIFastCGI与CGI特点FastCGI的工作原理FastCGI的不足 编辑本段什么是CGI  CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器

    fastcgi

    目录

    什么是CGI
    什么是FastCGI
    FastCGI与CGI特点
    FastCGI的工作原理
    FastCGI的不足

    编辑本段什么是CGI

       CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等

    编辑本段什么是FastCGI

      FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。  FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

    编辑本段FastCGI与CGI特点

      1、如CGI,FastCGI也具有语言无关性. 2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)  3、FastCGI技术目前支持语言有: C/C++JavaPerl、Tcl、 PythonSmallTalkRuby等。相关模块在 Apache, IIS, Lighttpd等流行的服务器上也是可用的。  4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。

    编辑本段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)可以工作。

    编辑本段FastCGI的不足

      因为是 多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆 内存,将这个数字乘以50或100就是很大的内存数。  Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个 Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
    展开全文
  • FastCGI

    2011-01-17 15:26:00
    更好的方法 - FastCGI 如果你正饱受 CGI 效率不佳之苦,又不想受限于 NSAPI 及 ISAPI ,也没有大笔银子去买昂贵的 Application Server,我建议你试试看 FastCGI。 不同于 NSAPI 及 ISAPI 以及其它的网页服务器...

    更好的方法 - FastCGI   如果你正饱受 CGI 效率不佳之苦,又不想受限于 NSAPI 及 ISAPI ,也没有大笔银子去买昂贵的 Application Server,我建议你试试看 FastCGI。   不同于 NSAPI 及 ISAPI 以及其它的网页服务器语言 (如 ASP, PHP3, mod_perl),FastCGI 比较类似 CGI,它只是一个网站应用程序设计的规格,因此先天上不受任何网站服务器平台,操作系统平台,以及开发语言的限制,但又能大幅改善 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++,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 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。   看到 FastCGI 这些特色后,是否跃跃欲试呢。下一章将介绍如何在 Apache 服务器上安装 FastCGI 的步骤

    展开全文
  • fastcgi.nim:Nim的FastCGI
  • fastcgi c++

    2011-09-21 12:01:36
    fastcgi fastcgi fastcgi fastcgi fastcgi
  • FastCGI SDK

    2017-07-17 17:13:10
    FastCGI的官方开发包,包含C, C++, Perl, Java, 库等文档与开发资源。(FastCGI官网已经打不开了 QwQ)
  • FastCGI支持库

    2020-07-24 09:00:39
    FastCGI支持库
  • lighttpd fastcgi

    2018-07-24 11:33:56
    5.注意fastcgi程序编译方式 进入cgi-bin目录中编译方式如下 2228 gcc -o caoft.fcgi echo.c -lpthread -lfcgi 2229 gcc -o caoft.fcgi size.c -lpthread -lfcgi 2230 gcc -o caoft.fcgi threaded.c -lpthread -...
  • fastcgi.zip

    2019-12-28 20:01:04
    fastcgi2.4.1 安装: ./configure make make install 现在官网已经没有了
  • fastcgi by c 1、修改fcgi_un.c文件中unixSocket为本机socket文件位置 2、修改fcgi_un.c文件中scriptFile为本机请求的php文件位置 3、gcc -o fcgiun fcgi_un.c 4、./fcgiun
  • 节点fastcgi 该模块是节点标准HTTP模块(仅服务器)的直接替代。 使用FastCGI无需更改为http服务器编写的代码即可正常工作。 它可用于构建FastCGI应用程序或将现有的节点应用程序转换为FastCGI。 该实现完全符合。...
  • 为易语言编写IIS FastCGI程序提供便利,使用本库前需了解FastCGI的安装方法和使用方法.FastCGI下载地址:http://www.iis.net/download/FastCGI。 操作系统支持: Windows
  • FastCGI介绍

    千次阅读 2019-08-21 17:20:20
    本文主要介绍 FastCGI 的相关知识。有关 CGI 的知识,点击此处查看。 1. 概述 FastCGI 实际上是增加了一些扩展功能的 CGI 、是 CGI 的改进,描述了客户端和Web服务器程序之间传输数据的一种标准。 FastCGI 致力于...

    本文主要介绍 FastCGI 的相关知识。有关 CGI 的知识,点击此处查看。

    1. 概述

    FastCGI 实际上是增加了一些扩展功能的 CGI 、是 CGI 的改进,描述了客户端和Web服务器程序之间传输数据的一种标准。

    FastCGI 致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。与 CGI 为每个Web请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。

    2. FastCGI 与 CGI

    2.1 相同点

     

    • 与 CGI 一样, FastCGI 也是语言无关的
    • 与 CGI 一样, FastCGI 在独立于Web服务器的(FastCGI)进程中运行应用程序,这种方式相对于 API 来说,具有更高的安全性。 API 将程序代码接口连接到Web服务器中,这可能导致:当某一个基于 API 的程序出现 bug 时,就会影响到其他应用程序或Web服务器。例如,一个恶意的基于 API 的程序可以从其他的应用程序或Web服务器中窃取关键的安全秘密
    • 与 CGI 一样, FastCGI 与任何Web服务器的内部架构都不存在绑定关系,因此,当Web服务器技术改变时, FastCGI 依旧很稳定。如果某个 API 与Web服务器的内部架构有关联,那么当Web服务器的架构发生变化时,这个 API 也要做出相应的改变

    2.2 不同点

    FastCGI 不仅继承了 CGI 的优点,而且还新增了若干新功能。

     

    • 分布式计算:我们可以Web服务器以外的机器上运行 FastCGI 应用程序。分布式计算是一项经过验证的技术,该技术应用于:调整、连接已存在的合作系统,充分利用系统性能,提升系统安全性(如 firewalls)
    • 多角色与可扩展角色: CGI 应用程序处理HTTP请求并给出返回值, FastCGI 的功能不止于此,例如,执行模块化的认证和身份检查、转换数据格式。FastCGI 的这些特性使其将来可充当更多的角色。

    3. 架构图

    FastCGI 的架构图如下:

    FastCGI 的工作流程如下:

    【准备阶段】:

    1.  Web服务器启动时,初始化 FastCGI 的程序执行环境。例如 Nginx 服务器对应的 ngx_http_fastcgi_module 模块

    2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web服务器的连接。例如,使用 spawn-fcgi FastCGI进程管理器启动 demo :

    spawn-fcgi -a 127.0.0.1 -p 8080 -f /opt/nginx-1.7.7/cgi-bin/demo

    说明:启动 FastCGI 进程时,可以配置以 IP 或UNIX域socket两种方式启动。

    【循环阶段】:

    3.  当客户端请求到达Web服务器时,Web服务器将该请求采用socket方式转发到 FastCGI 主进程, FastCGI 主进程选择并连接到一个CGI解释器(关联 FastCGI 子进程),然后,Web服务器将CGI环境变量和标准输入发送到 FastCGI 子进程。

    4. FastCGI 子进程完成处理后,将标准输出和错误信息从同一socket连接返回给Web服务器。最后, FastCGI 子进程关闭与Web服务器之间的连接。

    5. FastCGI 子进程继续等待并处理下一个来自Web服务器的连接。

     

    4. 总结

    由于 FastCGI 程序并不需要不断产生新进程,因此使用 FastCGI 可以大大降低Web服务器的压力并产生较高的应用效率。

    CGI 就是所谓的短生存期应用程序,而 FastCGI 就是所谓的长生存期应用程序, FastCGI 像是一个常驻(long-live)型的 CGI , FastCGI 可以一直执行着,而不会每次花费时间去fork(这也是 CGI 最为人诟病的 fork-and-execute 模式)。

    展开全文
  • Python FastCGI客户端 Python FastCGI客户端,用于通过FastCGI直接访问FastCGI Web资源 如何使用?(您应该开始FastCGI流程) from FastCGIClient import * client = FastCGIClient('127.0.0.1', 9000, 3000, 0) ...
  • php5-fastcgi 此扩展是实验性的。 该扩展通过FastCGIApplication类为PHP应用程序提供了libfcgi的某些功能。 正在安装 以下这些说明用于在运行Ubuntu 64位服务器15.04的虚拟机上安装扩展。 sudo apt-get install ...
  • PLUME_FASTCGI

    2017-10-06 14:10:04
    为 Plume HTTP Server 提供 FastCGI 支持的插件。实现 FastCGI 通信协议,可移植为其他服务器插件。
  • Julia FastCGI 进程管理器 可用,但仍在开发中。 这是一个简短的自述文件,可帮助您入门。 要求 你需要已经在系统的某个地方编译了 Julia,例如/usr/bin/julia 汇编 编译main.c链接libfcgi eg cc -o bin/julia-...
  • Nginx+VFP FASTCGI

    2019-11-04 10:43:48
    这是一个 Nginx+VFP FASTCGI 开发示例。 包括了vfp源码,nginx,以及fastcgi等工具
  • fastcgi介绍

    2012-11-06 11:17:37
    介绍了FASTCGI的原理以及利用NGINX来搭建PHP站点。
  • fastcgi64.zip

    2021-09-17 09:34:54
    fastcgi iis64位 php
  • FastCGI模块(FastCGI

    2014-12-08 18:10:16
    ...这个模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。 例: location / { fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/ww
  • fastcgipp:fastcgi ++:一个C ++ FastCGI和Web开发平台:
  • fastcgi配置

    2018-01-07 16:53:19
    我们这里说的fastcgi配置专指nginx对fastcgi的配置,fastcgi本身的配置介绍在fastcgi 安装文中有说明。 nginx的fastcgi模块提供的命令 fastcgi_pass 这个命令是指定将http代理到哪个fastcgi服务端接口。fastcgi_pass...
  • c语言实现fastcgi

    千次阅读 2019-04-27 23:09:30
    参考 fastcgi官网 使用 fastcgi官网迁移到了github了,下载FastCGI Developer’s Kit
  • apache-fastcgi

    2015-08-03 17:26:51
    apache fastcgi install tools and development environment.
  • FastCGIFastCGI 协议分析

    千次阅读 2018-08-10 16:43:56
    FastCGI 协议分析 FastCGI(快速通用网关接口)是一种让交互程序与Web服务器通信的协议,可以算是CGI的增强版本。FastCGI减少了网页服务器与CGI程序之间的开销,使得服务器可以同时处理更多的网页请求。目前很多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,660
精华内容 36,264
关键字:

fastcgi