您的位置:澳门新葡萄京最大平台 > www.4996.com > Common Gateway Interface

Common Gateway Interface

发布时间:2019-09-13 17:51编辑:www.4996.com浏览(192)

    CGI(一个协议) 是web服务器和外部应用程序(cgi程序)之间的接口标准,是cgi程序和web服务器之间传递信息的规程。

    cgi

    在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

    处理步骤:

    ⑴通过Internet把用户请求送到web服务器。

    ⑵web服务器接收用户请求并交给CGI程序处理。

    ⑶CGI程序把处理结果传送给web服务器。

    ⑷web服务器把结果送回到用户。

    cgi程序是由用户的输入触发的,运行在web服务器上的程序。CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的使用类型程序,就好像他们在实际使用那些远程计算机一样。

    cgi

    工作原理:

    1.浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。

    2.服务器收发到请求。

    3.服务器执行指定所CGI应用程序。

    4.CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。

    5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。

    6.网络服务器把结果返回到浏览器中。

    www.4996.com,最低水平,PHP可以做任何其他CGI程序所能做的事,例如收集表格数据,生成动态页面内容,或者收发cookies.可能最强大,最有意义的特性是PHP支持大范围的数据库.书写一个支持数据库的Web 页面是难以置信的简单。


    FastCGI(一个协议)

    CGI 的性能缺点:web server 得到一个request 后,会fork一个子进程,然后子进程执行cgi程序。这意味着 如果N个请求并发访问同一cgi 程序,那么该程序会被装载入内存N次。cgi进程的反复加载造成了cgi的性能低下。

    FastCGI 就是一个常驻型(long-live)的cgi。它的主要行为是将cgi解释器进程保存在内存中以获得较高的性能。

    工作原理:

    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)可以工作。


    PHP-CGI(实现了FastCGI的程序)

    PHP-CGI是PHP自带的FastCGI管理器。

    PHP-CGI的不足:

    php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。

    直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)


    PHP-FPM(实现了FastCGI的程序)

    PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。解决了php-cgi的一些问题。

    PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM

    CGI方式是每个请求fork一个子进程,然后再销毁.高频度的访问下,频繁的fork产生额外的系统开销,限制了处理能力,所以在apache下跑php一般都是内嵌模块的方式(mod_php)

    话说CGI还有一种变种FASTCGI, 为了解决CGI的这种缺陷, 大概是上世纪90年代中期出现了FASTCGI, 以常驻进程的方式提供CGI服务,

    只是差不多与此同时,apache有了mod_perl, mod_php等模块,性能貌似比较有优势,大家都喜欢用这种方式, 所以fastcgi没立刻火起来。

    本文由澳门新葡萄京最大平台发布于www.4996.com,转载请注明出处:Common Gateway Interface

    关键词: