FastCGI 介绍

FastCGI 介绍本文主要介绍FastCGI的相关知识。首先简要看一下CGI(百科)CGI(通用网关接口)CGI是Web服务器运行时外部程序的规范, 按CGI编写的程序可以扩展服务器功能。CGI应用程序能与浏览器进行交互,还可通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。…

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

本文主要介绍 FastCGI 的相关知识。首先简要看一下 CGI (百科)

CGI(通用网关接口)

CGI 是Web 服务器运行时外部程序的规范,  按CGI 编写的程序可以扩展服务器功能。

CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。

几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与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服务器的连接。

 

 

总结

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

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

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

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

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


相关推荐

  • Python – 实现矩阵转置

    Python – 实现矩阵转置有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],现在要把该二维列表变成为[[1,4,7,10],[2,5,8,11],[3,6,9,12]]。其实不动脑筋的话,用二重循环很容易写出来:#!/usr/bin/envpython3#-*-coding:utf-8-…

    2022年5月5日
    40
  • CListCtrl控件详解

    CListCtrl控件详解Create创建列表控件并将其附加给CListCtrl对象。

    2022年6月23日
    72
  • macbookpro安装anaconda_mac下python编程软件

    macbookpro安装anaconda_mac下python编程软件参考:https://www.cnblogs.com/xrblog/p/11839393.html安装Anaconda从官网下载,这里选择的是Python3.7版本的图形化安装包 安装后,在命令行中输入conda–version,如果安装成功,会显示版本号 但我并没有显示,所以根据Anaconda之Python环境配置(Mac版)配置了环境变量: 首先,找到Anaconda的安装路径下bin文件的位置,我的路径是/opt/anaconda3/bin (再记录一下,

    2022年8月29日
    2
  • 常见JVM面试题及答案整理[通俗易懂]

    常见JVM面试题及答案整理[通俗易懂]前言总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。1.什么情况下会发生栈内存溢出。思路:描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。我的答案:栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作…

    2022年6月9日
    29
  • 【python】错误SyntaxError: invalid syntax的解决方法总结

    【python】错误SyntaxError: invalid syntax的解决方法总结今天学习了python,然而刚开始就出了一个难题,明明代码没有一点问题,可是每次运行都会显示“SyntaxError:invalidsyntax”。“SyntaxError:invalidsyntax”的意思就是语法错误;经过查询解决了这个问题,所以总结一个这个问题的解决方法:版本问题:因为python2和python3是不兼容的;可以尝试更换版本;粗心问题:忘…

    2022年5月28日
    165

发表回复

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

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