zoukankan      html  css  js  c++  java
  • CGI + FastCGI(PHP-FPM)联系与区别 【图解 + 注释】

    〇、背景


    参考了几篇文章,总结成 图解 + 注释 方便以后查阅。

    参考资料:
    1、https://www.zhihu.com/question/19582041
    2、https://segmentfault.com/q/1010000000256516

    一、CGI


    1、什么是 CGI

    CGI(Common Gateway Interface,通用网关接口),是服务器与程序(或脚本)进行通信的接口。CGI 使程序员能够编写自己的动态 Web 应用程序。

    2、原理

    CGI 采用的是“fork-and-execute”的工作模式。即:

    对一个 CGI 程序,做的工作其实只有:从环境变量(environment variables)和标准输入(standard input)中读取数据、处理数据、向标准输出(standard output)输出数据。

    1、环境变量 中存储的叫 Request Meta-Variables,也就是诸如 QUERY_STRING、PATH_INFO 之类的东西,这些是由 Web Server 通过环境变量传递给 CGI 程序的,CGI 程序也是从环境变量中读取的。

    2、标准输入 中存放的往往是用户通过 PUTS 或者 POST 提交的数据,这些数据也是由 Web Server 传过来的。

    3、优缺点

    优点:设计简单
    缺点:效率低下,每个请求都需要fork一个新的CGI进程去处理。

    二、FastCGI(PHP-FPM)


    1、什么是 FastCGI

    FastCGI(快速通用网关接口),是CGI的增强版本。其目的在于,减少Web服务器与CGI程序之间交互的开销,使得服务器可以同时处理更多的请求。

    2、原理

    与 CGI 的 “fork-and-execute” 工作模式不同,FastCGI 是 “master-worker” 工作模式。像是一个常驻型的 CGI(守护进程),可以通过配置多个进程,来处理一连串的请求。

    注:

    • PHP-FPM 是 FastCGI 协议 的一个实现
    • 自 PHP 5.3版,PHP 内置 了PHP-FPM

      使用 --enalbe-fpm 这个编译参数

    3、优缺点

    优点:提高服务器的性能
    缺点:比较耗费资源

    4、注意事项

    (1)关于平滑重启

    修改 php.ini 之后,php-cgi 进程的确是没办法平滑重启的。php-fpm 对此的处理机制是新的 worker 用新的配置,已经存在的 worker 处理完手上的活就可以歇着了,通过这种机制来平滑过度。

    三、[拓展] WSGI


    WSGI 也是一种基于 CGI ,跟 FastCGI 类似的规范,专用于 python 领域。

    参考我的另一篇文章:《Dash by Plotly 学习笔记》

  • 相关阅读:
    团队项目——个人工作任务认领
    第八周进度总结
    Scrapy框架安装与使用(基于windows系统)
    《掌握需求过程》阅读笔记四
    《掌握需求过程》阅读笔记三
    《掌握需求过程》阅读笔记二
    《掌握需求过程》阅读笔记(一)
    MapReduce显示最受欢迎的Top10课程(按照课程编号)
    MapReduce处理数据1
    MongoDB Java操作
  • 原文地址:https://www.cnblogs.com/xjnotxj/p/7511778.html
Copyright © 2011-2022 走看看