一文搞懂CGI、FastCGI

CGI

CGI(Common Gateway Interface)公共网关接口,CGI是一种协议。准确地说,CGI是应用程序(如PHP)与Web服务器交互的一个标准接口、协议。

  • 根据CGI标准,编写应用程序,可以对客户端输入的数据进行处理,完成客户端与服务器的交互操作;
  • CGI定义了Web服务器如何向扩展应用程序发送消息,在收到应用程序信息后又何如进行处理等内容;

还是通过一张图来理解上面的内容吧:

 

  • CGI是Web 服务器与Web应用程序(php/python等)之间数据交互的一种协议;
  • FastCGI与CGI一样,也是Web服务器与Web应用交互的一种协议,只是FastCGI在效率上比CGI更好;

CGI实现原理与问题

  • CGI程序运行在独立的进程,而且每个Web请求都创建一个进程,在结束时销毁。这种“每个请求一个新进程”使得CGI效率较差,难以扩展;
  • 在高负载情况下,用于进程创建和销毁的操作系统开销变得很大;
  • 由于进程地址空间无法共享,CGI进程模型限制了重用方法,如重用数据库链接等;

FastCGI

快速通用网关接口(Fast Common GateWay Interface)与CGI一样,也是一种让应用程序与Web服务器通信的协议。FastCGI是CGI的增强版本。

  • FastCGI减少了Web服务器与CGI程序之间交互的开销,使得服务器可以同时处理更多的网页请求。

实现

  • FastCGI使用持续的进程来处理请求,这些进程由FastCGI服务器管理,而不是Web服务器。
  • FastCGI像是一个常驻(long-live)型的CGI,可以一直执行着,不需要每个请求都进程创建和终止的开销。

FastCGI工作原理

  1. Web服务器启动时载入FastCGI进程管理器(如PHP-FPM);
  2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web服务器的连接;
  3. 当客户端请求到达Web服务器时,FastCGI进程管理器选择并连接到一个CGI解释器。Web服务器把环境变量和这个页面请求通过一个socket或TCP connection传递给FastCGI子进程;
  4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。

PHP-CGI

php-cgi是php自带的FastCGI管理器。

php-cgi的不足

  • php-cgi在变更php.ini配置后需重启php-cgi才能让新的php.ini生效,没做到平滑重启;
  • 直接杀死php-cgi进程,php就不能运行了;

PHP-FPM

php-fpm是PHP FastCGI管理器。FastCGI只是一个协议规范,需要每个语言具体实现,PHP-FPM就是PHP版本的FastCGI协议实现。

  • 支持平滑重启,就是收到重启信号后,先kill掉空闲worker进程,新的worker用新的配置;
  • 可以根据请求来访压力变化动态增减worker进程数量;
     
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CGI(Common Gateway Interface)是一种通用的Web服务器和应用程序之间的接口标准,它定义了Web服务器如何向外部程序传递数据,以及如何从外部程序获取数据的规范。当Web服务器收到一个CGI请求时,它会启动一个CGI进程来处理该请求,CGI进程将执行一些特定的任务(如生成动态网页),并将结果返回给Web服务器,最终由Web服务器将结果发送给客户端。 FastCGIFast 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服务器和应用程序之间的接口标准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路上的追梦人

您的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值