CGI、FastCGI、PHP-FPM联系与区别(理解总结自其他博文)
参考:http://blog.csdn.net/tyrantbear/article/details/52077321
参考:https://www.zhihu.com/question/19998865?sort=created
参考:http://baike.sogou.com/v9381730.htm?fromTitle=fastcgi
参考:https://technet.microsoft.com/library/hh831548.aspx
浏览器通过http协议请求到Web Server,Web Server解析这个请求,然后把这个请求的各种参数写进进程的环境变量中,比如请求方法,源路径等。接下来,web服务器就会通过CGI协议调用对应的应用程序。
CGI(Common Gateway Interface):Web Server(如Appache,IIS,Nginx,Tomcat等服务器)与 Web Application(如php,java,asp.net等应用程序)之间的通信协议,规定要传什么数据、以什么格式传。与具体的实现语言无关。使用CGI协议的应用程序叫做CGI程序。
FastCGI(Fast Common Gateway Interface):同CGI,是服务器与应用程序之间的通信协议,还规定了最大Instances,实力最大请求 等。使用FastCGI协议的应用程序叫做FastCGI程序。与CGI的区别是:FastCGI程序的性能比CGI程序高。
PHP-CGI就是php实现CGI协议的接口程序,可以称为CGI程序。是PHP的解释器。
PHP-FPM就是php实现FastCGI协议的接口程序,可以称为FastCGI程序。只有Linux系统会使用PHP-FPM,Windows系统只会使用PHP-CGI.
FastCGI程序的性能比CGI程序高 的 原因(拿php举例):
场景模拟:当web服务器接收到 /index.php请求后,会启用对应的CGI程序,这里即对应PHP-CGI,接下来PHP-CGI会解析php.ini文件,初始化执行环境,然后处理请求,再按照CGI规定的格式返回处理后的结果,最后退出进程。Web服务器在将结果返回给浏览器。
性能拖累点:每个启动的PHP-CGI都会解析php.ini文件,初始化执行环境。即每次都启动一个新进程。
FastCGI程序的应对措施:先启动一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时master会传递给一个worker,然后立刻接收下一个请求。当worker不够用时,master可以根据配置预先启动几个worker。当空闲worker太多时,master可以根据配置停掉一些,这样就提高了性能,节约了资源。这就是FastCGI对进程的管理。
Php-fpm诞生的另一个原因是:当修改了php.ini配置文件后,php-cgi进程不能平滑重启。Php-fpm对应的处理机制是新的worker用新的配置,已经存在的worker处理完手上的活就停止了。
SAPI(Server Application Programming Interface),服务器应用编程接口
参考:http://blog.csdn.net/fangru/article/details/9137079
解耦web服务器与web应用程序,类似socket。如果没有这一层,那么web服务器直接与web应用程序通信,如果加上这层,则web服务器与SAPI通信,SAPI与web应用程序通信。
CGI、FastCGI、PHP-FPM联系与区别(理解总结自其他博文)的更多相关文章
- cgi fastcgi php-cgi php-fpm
参考: 摘至:http://www.cnblogs.com/thinksasa/p/4497567.html 详说fastcgi,php-fpm的区别:http://segmentfault.co ...
- CGI,FastCGI,PHP-CGI与PHP-FPM区别详解【转】
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- cgi fast-cgi php-fpm区别
php-cli 是php在系统执行的程序,直接执行php文件: cgi和fast-cgi的区别1.cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件:cgi程序就会去解 ...
- 转:nginx+CGI/FASTCGI
简介版: 1.fastcgi与cgi区别:fastcgi通过线程来响应请求,而cgi对每个请求生成一个进程. 2.典型nginx数据传输过程:user->nginx->本地socket(请 ...
- CGI FASTCGI php-fpm
CGI(Common Gateway Interface) CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工 ...
- CGI & FastCGI 协议
目录 CGI 是什么 CGI 特点 CGI 的流程 FastCGI 是什么 CGI & FastCGI(转载) 推荐Blog: CGI是什么,FastCGI是什么 CGI 是什么 公共网关接口 ...
- Nginx + CGI/FastCGI + C/Cpp
接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...
- 漫谈CGI FastCGI WSGI
作者:auxten链接:https://zhuanlan.zhihu.com/p/20054757来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. CGI(Common ...
- PHP-CGI, FastCGI, PHP-FPM的关系和区别
Web server(apache, nginx) 接受到一个php请求后要解析php文件, 怎么解析呢, web server是C语言写的, 所以需要一个协议, 一个php解释器, 也就是CGI. ...
- [转] Nginx + CGI/FastCGI + C/Cpp
接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...
随机推荐
- KAGGLE竟赛
KAGGLE竟赛 关于kaggle的竟赛规则我们勇闯组做出了一些说明,大家可以借鉴一下如何参加kaggle,参加kaggle大赛的一些注意事项,自己参加一些项目,一定会使你的知识量得到质的提升 这是链 ...
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据 ...
- dubbo直连提供者 & 只订阅 & 只注册
1. dubbo直连提供者 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点 ...
- JavaScript事件循环机制
事件循环 事件循环不仅仅包含事件队列,而是具有至少两个队列,除了事件,还要保持浏览器执行的其他操作.这些操作被称为任务,并且分为两类:宏任务(或通常称为任务)和微任务. 单次循环迭代中,最多处理一个宏 ...
- 微信小程序开发学习(一)
一.各种JSON配置 1.小程序配置app.json 为小程序全局配置,包括所有页面路径.界面表现.网络超时时间.底部tab等,类比APP开发中manifest配置. 2.工具配置project.co ...
- Java定时清理过期文件
项目中经常需要自动定时去清理一些过期文件,这个其实Java实现挺简单的,核心部分就2个,一个定时任务,一个递归删除文件,不过前提是你的文件放在以“2018-12-05”这样命名的文件夹下,下面直接上核 ...
- 从头开始学gradle【Gradle 构建基础】
构建基础 Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念. 任何一个 Gradle 构建都是由一个或多个 projects 组成.每个 projec ...
- 详解MariaDB数据库的索引
1.什么是索引 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 更通俗的说,数据库索引好比是一本书前面的目录,在查找内容之前可以先在 ...
- Linux下系统如何监控服务器硬件、操作系统、应用服务和业务
1.Linux监控概述 Linux服务器要保证系统的高可用性,需要实时了解到服务器的硬件.操作系统.应用服务等的运行状况,各项性能指标是否正常,需要使用各种LINUX命令.做到自动化运维就 ...
- Ipa 脱壳工具 Clutch dumpdecrypted 使用
1 Clutch 使用 下载地址 : https://github.com/kjcracks/clutch/releases 下载之后去掉去掉版本号 拖入手机的 /usr/bin/ 目录下 执行 c ...