CGI和FastCGI的区别

                             CGIFastCGI的区别

 

CGI

首先我们要了解什么是CGI: 通用网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准当你动态请求web服务器资源的时候,就需要cgi来处理动态语言和web服务器之间的交流,因为web服务器是没办法直接处理动态请求的。

CGI处理Web Server 与后端的动态语言交流时后端都要启动创建一个进程,接收Web Server的请求,处理然后响应,处理完成之后,就会关闭该进程。然后下次有新请求的时候,又会重新创一个进程进行处理。 

那这就引出了另外一个问题, 什么是网关,简单理解就是一个转换器, 可以把Http协议请求转换成Ftp协议/SMTP协议。并响应给用户,通过这种转换,用户就可以直接通过Http协议获取Http协议的服务器资源了

回到CGI,我们知道, Web Server 可以直接给用户提供网络资源, 但一般都是静态的网络资源,一旦我们需要根据用户请求动态的获取服务器资源的话, 就不太好处理了, 因为Web Server 并不直接提供这种功能

也许我们已经知道了PHPPython, Java 等等这些语言可以作为动态语言为服务器提供动态资源。的确,很多动态资源都是依赖这些语言实现的。

Web Server 是如何与这些动态语言交流的呢。

这里就需要预先协定好一套协议, 这个协议可以允许Web Server 把请求正确地传递给动态语言,而动态语言也能正确的将响应返回给Web Server 再由Web Server 响应给客户端

这里的协议就可以说是一个CGI

FastCgi

FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一直运行着,一般的CGI 实现时,Web Server 每次与后端的动态语言交流时, 后端都要启动一个进程,接收Web Server的请求,处理然后响应。 这种方式很耗费服务器资源(频繁的创建销毁进程)

于是,FastCgi应运而生.

CGI的实现不同, FastCgi实现时,启动的是一个守护进程, 并启动若干个子进程,这样,Web Server再每次有新的请求发送过来时, 守护进程将请求分配给某个子进程处理并返回,如果再同时有多个新的请求进来, 那这些新的请求也可以被直接分配给其他的子进程

这样,通过预先创建进程的方式减少频繁的进程创建销毁的过程,并提高并发处理能力

总之,FastCgi 也是一种CGI 只不过实现的机制不同, 但都是协议,帮助Web Server与后端的动态语言交互

PHP-FPM

一个PHP FastCGI管理器,可以调度管理CGI程序,PHP-FPM 是对 FastCgi 的一种实现, 他在启动后也会创建一个守护进程和若干个子进程,过程就和上面FastCgi的交互一样,如果说fastcgi是一种原理理论的话,那么php-fpm则是一种应用,既可以处理请求,也可以管理调度CGI

PHP-CGI

是一个PHP 的解释器它只是个 CGI 程序,是对CGI的一种实现,只能解析请求,返回结果,不会进程管理

 

 

总结:

·  CGI:是 Web Server Web Application 之间数据交换的一种协议。

·  FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。

·  PHP-CGI:是 PHP Web Application)对 Web Server 提供的 CGI 协议的接口程序。

·  PHP-FPM:是 PHPWeb Application)对 Web Server 提供的 FastCGI 协议的接口程序,



 

CGI(Common Gateway Interface)是一种通用的Web服务器和应用程序之间的接口标准,它定义了Web服务器如何向外部程序传递数据,以及如何从外部程序获取数据的规范。当Web服务器收到一个CGI请求时,它会启动一个CGI进程来处理该请求,CGI进程将执行一些特定的任务(如生成动态网页),并将结果返回给Web服务器,最终由Web服务器将结果发送给客户端。 FastCGI(Fast Common Gateway Interface)是CGI的改进版,它采用了一种新的进程管理方式,即通过复用已经存在的进程来处理多个请求,避免了每次请求都要启动一个新的CGI进程的开销,从而提高了性能和效率。 下面是它们的区别和联系: 1. 区别FastCGICGI在进程管理方面的不同 FastCGI采用了一种新的进程管理方式,即用进程池的方式来处理多个请求,而CGI则是每个请求启动一个新的进程。这意味着FastCGI可以避免因频繁启动新进程而造成的性能损失。 2. 区别FastCGI支持长连接,而CGI不支持 FastCGI支持长连接,即在一次请求中可以发送多个请求,而CGI只支持一次请求一个响应。 3. 联系:FastCGICGI都是Web服务器和应用程序之间的接口标准 无论是FastCGI还是CGI,它们都是Web服务器和应用程序之间的接口标准,用于定义Web服务器如何向外部程序传递数据,以及如何从外部程序获取数据的规范。 总之,FastCGI相对于CGI具有更好的性能和效率,并且支持长连接,但是它们都是Web服务器和应用程序之间的接口标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值