cgi、fastcgi、php-cgi、php-fpm异同

cgi、fastcgi、php-cgi、php-fpm异同,第1张

1. cgi

    - 通用网关接口,就是外部应用程序(cgi程序)与web服务器之间的接口标准。

    - nginx是内容分发者,如果是请求index.php,根据配置文件内容得知不是静态文件,就会去找对应的cgi程序进行解析

    - cgi就是规定要传那些数据,以什么格式传递给后方进行处理的协议

    - cgi工作模式,一个请求发送过来,启动cgi解释器(创建进程)->逻辑处理 ->退出 (fork and exec 模式) 每次都需要重新创建进程,加载配置,浪费系统资源

2. fastcgi

    - 快速通用网关接口,常驻型的cgi,不用每次都fork进程,其会使cgi解解释器进程常驻内存,所以性能较高

    - master-worker模型,服务器启动时载入fastcgi进程管理器

    - fastcgi会进行自身初始化,初始化时会创建多个进程

    - 请求到达web服务器后,fastcgi进程管理器会选择并通过socket连接到一个cgi解释器

3. php-cgi

    - php自带的cgi管理器

    - php-cgi的缺点,不能平滑重启,需要重启php-cgi才能使php.ini生效

4. php-fpm

    - php-fpm是php的一种fastcgi的实现,管理php的fastcgi进程池

    - 能够调度php-cgi程序

    - 能够实现平滑重启

    - php-fpm创建一个master进程,然后创建进程池,监听socket,fork出多个子进程,子进程各自accept请求,php-fpm的子进程同时只能响应一个请求,处理完一个请求才可以accept下一个请求,多进程,同步阻塞模型

    - master和worker进程之间不直接进行通信,master通过共享内存获取worker进程信息,master进程发送信号通知worker进程

    - php-fpm可以同时监听多个端口,每个端口对应一个worker pool

    - worker是cgi程序,php-fpm是fastcgi协议的php是实现

一般的网页服务架构是这样的:

浏览器

   |

网站服务器(apache, nginx等)  只支持静态内容(html, 图片,文件)

   |        \

CGI      Fast CGI (两种编程规范,按照特定的方式读输入,写输出。也叫协议。)

   |         |

任何语言    任何语言  (按照上面的规范来写代码,提供动态内容,比如读写数据库,根据数据库展示不同内容)

任何语言中就包括了php

其中CGI的方式就是,网站服务器会把CGI程序当成普通的程序一样调用,然后把CGI程序的标准输出流作为内容返回给浏览器。每来一个请求,就要启动一个CGI程序。所以php可以直接加上可执行属性(仅linux),就可以让网站服务器调用。缺点是响应慢而且占用内存多(每次启动程序的消耗较大)。

而FastCGI的方式就是,网站服务器通过socket跟FastCGI程序获取输入输出。FastCGI程序会启动一个程序一直运行并监听端口。每来一个请求,不需要再启动新的程序。php提供了php-fpm这个东东来监听端口。

CGI程序的功能:首先Nginx等webserver向这个CGI程序请求某个页面,如果该页面存在,CGI程序就会去获取那个页面的原始数据,然后把它转换成HTML并把结果返回给webserver进而输出给用户浏览器。

PHP等只要能够处理文本的语言都可以用于编写CGI程序。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11566417.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存