PHP7内核剖析之CGI与FastCGI

1. 什么是CGI与FastCGI

CGI(Common Gateway Interface,公共网关接口)是一种用于在Web服务器上运行外部程序的标准。当Web服务器接收到一个CGI请求时,它会启动一个新的进程,将请求的数据传递给这个进程处理,并将处理结果返回给Web服务器。CGI接口是Web服务器与CGI程序之间的桥梁,使得Web服务器能够调用外部程序来生成动态内容。

而FastCGI是CGI的一种改进。与普通的CGI不同,FastCGI进程可以保持持久的连接,不需要为每个请求都启动一个新的进程。这样可以大幅提高CGI的性能,并且减少了开销。

2. PHP7的CGI与FastCGI支持

2.1. PHP作为CGI程序

在PHP7之前的版本中,PHP可以作为CGI程序运行。对于每一个CGI请求,Web服务器会启动一个新的PHP进程,并将请求的数据传递给PHP进程来处理。PHP进程会解析请求中的脚本,执行相应的逻辑,并将运行结果返回给Web服务器。

#!/usr/bin/php-cgi

<?php

// 处理CGI请求

上述代码是一个简单的CGI脚本示例。当Web服务器接收到一个CGI请求时,会将请求的数据传递给这个脚本来处理。脚本可以读取请求的参数、设置响应头、生成动态内容,并将结果返回给Web服务器。

2.2. PHP7引入的FastCGI支持

在PHP7中,引入了对FastCGI的原生支持,即PHP-FPM(PHP FastCGI Process Manager)。PHP-FPM是一个独立的进程管理器,可以接收Web服务器发送过来的FastCGI请求,并将请求分发给相应的PHP进程来处理。

PHP-FPM的好处在于,可以通过配置文件调整PHP进程池的大小,来控制并发请求的处理能力。这样可以在处理高并发请求时提高整体的性能。

3. CGI与FastCGI的对比

3.1. 性能比较

由于FastCGI可以保持持久的连接,并且减少了进程启动和关闭的开销,因此在性能上要优于传统的CGI。这对于需要处理大量并发请求的情况特别重要。

3.2. 配置和部署

传统的CGI需要将CGI程序部署到Web服务器中,并进行相应的配置。而FastCGI则需要额外配置PHP-FPM来管理进程池。因此,FastCGI的部署和配置相对复杂一些。

4. 小结

CGI与FastCGI都是Web服务器与外部程序之间的接口,用于动态生成Web内容。CGI是传统的方式,每个请求都需要启动一个新的进程,速度较慢。而FastCGI则是一种改进,可以保持持久的连接,大幅提高性能。

在PHP7中,引入了对FastCGI的原生支持,通过PHP-FPM来管理进程池,进一步提高了PHP的性能和并发处理能力。

总的来说,对于需要处理大量并发请求的场景,使用FastCGI可以获得更好的性能。而对于简单的应用,使用传统的CGI也可以满足需求。

后端开发标签