PHP-FPM简介
本文字数:539 字 | 阅读时长 ≈ 1 min

PHP-FPM简介

本文字数:539 字 | 阅读时长 ≈ 1 min

CGI与FastCGI协议

每种动态语言的代码文件需要通过对应的解析器才能被服务器识别,而CGI协议是使解释器和服务器之间可以相互通信。PHP文件在服务器上的解析需要用到PHP解释器,加上对应的CGI协议,从而使服务器可以解析到PHP文件。

由于CGI的机制是每处理一个请求需要fork一个CGI进程,请求结束后再kill掉这个进程,在实际应用中比较浪费资源,于是就出现了CGI的改良版FastCGI,FastCGI在请求处理完后,不会kill掉进程,而是继续处理多个请求,大大提高了效率。

PHP-FPM是什么

PHP-FPM即PHP-FastCGI Process Manager,它是FastCGI的实现,并提供了进程管理的功能。
进程包括master和worker进程两种;master进程只有一个,负责监听端口,接收来自服务器的请求。
而worker进程则一般有多个,每个进程内部都会嵌入一个PHP解释器,是代码真正执行的地方。

Nginx与PHP-FPM的结合

在Linux上,Nginx与PHP-FPM的通信有Tcp socket和unix socket两种方式.
Tcp socket的优点是可以跨服务器,当nginx和PHP-FPM不在同一个机器上时,只能使用该方式。

Unix socket又叫IPC(inter-process communication进程间通信)socket,用于实现同一主机上的进程间通信,这种方式需要在nginx配置文件中填写PHP-FPM的socket文件位置。

两者不同点:
由于Unix socket不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用数据从一个进程拷贝到另一个进程。效率比Tcp socket的方式要高,可减少不必要的Tcp开销 。但Unix socket高并发时不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向链接协议的支撑下,大数据包可能会直接出错不返回异常。但Tcp面向连接的协议,可以更好的保证通信的正确性和完整性。

Jan 03, 2020
Nov 18, 2019
Nov 07, 2019
Nov 07, 2019