• php CGI与FAST CGI


    CGI:

    CGI(Common Gateway Interface)是一种协议用于规定Web Server(Apache2, Nginx)与php或者java等间进行交流的一种语言无关的协议。

    这一点比较好理解,因为服务器软件Apache2, Nginx它们是不针对任何一种后台处理语言而设计的,那么就需要一种标准的协议来处理服务器软件与处理语言的接口,就是CGI。

    FAST CGI:

    CGI有很多缺点如下:

    1. 无需每个请求来都要读取php.ini文件来初始化运行环境
    2. 修改php.ini文件后无需停下业务进行重启

    为了解决以上的这些缺点就提出了FAST CGI,同样的他也是一种协议。在PHP中使用的就是php-fpm,它的工作原理比较类似于LabVIEW FPGA里边的Compile farm与Compile worker之间的关系,php-fpm会根据请求来动态调度请求给php-cgi来解析用户的请求,并且维持一定数量的php-cgi来应对请求。它也解决了CGI的缺点2,当ini发生变化后启动的php-cgi会使用新的ini来配置运行环境。

    工作流程:

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

    参考资料:

    https://segmentfault.com/q/1010000000256516

    http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/

  • 相关阅读:
    SpringBoot java.lang.IllegalArgumentException: Request header is too large
    (转)以太坊 钱包 创建 导入 Keystore
    (转)以太坊数据同步常见问题集锦
    以太坊nonce
    (转)Fabric 1.0 读写集
    (转)Fabric CA环境的集成
    Hyperledger Fabric CA的命令行用法
    oracle新建表空间与用户
    积分智能合约
    远程桌面,身份验证错误:要求的函数不正确等解决办法
  • 原文地址:https://www.cnblogs.com/wlemory/p/5240653.html
Copyright © 2020-2023  润新知