FastCGI介绍

FastCGI介绍本文主要介绍FastCGI的相关知识。有关CGI的知识,点击此处查看。1.概述FastCGI实际上是增加了一些扩展功能的CGI、是CGI的改进,描述了客户端和Web服务器程序之间传输数据的一种标准。FastCGI致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。与CGI为每个Web请求创建一个新的进程不同,…

大家好,又见面了,我是你们的朋友全栈君。

本文主要介绍 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介绍

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 模式)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157363.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5分钟商学院之个人篇–情感和创新

    1.情感能力情商的5个基础元能力:同理心、自我认知、自我控制、自我激励和人际关系处理1.1同理心从别人的情感出发,站在别人的角度看待问题怎样才能训练同理心?指路玩杀人游戏1.2自我

    2021年12月30日
  • Tomcat如何配置环境变量

    Tomcat如何配置环境变量分步阅读下载安装tomcat,如何配置环境变量?配置过程中是否和作者一样经常出现错误?请仔细读文及注意事项。工具/原料1,JDK:版本为jdk-8u121-windows-x64.exe下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html2,tomcat:版本为apache-tomcat-8.0.36-windows-x64.zip下载地址http://tomcat.apache.org/3,wn10,

    2022年6月3日
  • CGlib 入门

    CGlib 入门CGlib入门cglibgithub地址链接。项目maven构建:cglibcglib3.1项目gradle构建:dependencies{compile’cglib:cgl

    2022年6月5日
  • bert原理详解(duhamel原理)

    一文读懂BERT(从原理到实践)2018年的10月11日,Google发布的论文《Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstanding》,成功在11项NLP任务中取得stateoftheart的结果,赢得自然语言处理学界的一片赞誉之声。本文是对近期关于BERT论文、相关文章、代码进…

    2022年4月17日
  • python进制转换函数及方法[通俗易懂]

    python进制转换函数及方法[通俗易懂]python进制转换函数一.通过int函数实现其他进制转十进制假设M为某已知进制字符串n的进制数result=int(n,M)——————————————————————————————->>>result=int(‘10101’,2)>>>result>>>21result为转换为的十进制结

    2022年5月19日
  • 解决SecureCRT 中文乱码

    解决SecureCRT 中文乱码在linux服务器上搭建solr,用的是SecureCRT 连接linux服务器,发现不能输入中文,配置文件中的中文也是乱码;先以为是SecureCRT工具编码的问题,把编码改成utf-8之后发现还是有乱码;最后才发现其实还有一个地方没有改配置,那就是字体必须是中文字体,而且字符集得是支持中文的字符集如gb2312:还有就是这里不能选择带@的中文字体,不然字体就是躺着的

    2022年7月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号