php运行原理

PHP-FPM是多进程的FastCGI管理程序

FastCGI 协议

Nginx 通过 FastCGI 协议将请求转发给 PHP-FPM 处理

协程是一种轻量级的线程

一个进程内同一时间只会有一个协程在运行且切换时机明确

http请求过程

1. 解析URL

浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。

2. 域名解析

服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:

1、从浏览器自身的缓存中解析此域名数据

2、从本地电脑的HOST文件中解析域名

3、通过DNS服务器解析域名

3. 拿信息

这个步骤我们拿到了URL的信息,主要是IP和端口信息。

4.封包并进行三次握手

浏览器将请求信息进行打包,通过TCP的三次握手将数据传递至服务器。

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接

第一次握手:建立连接时,客户端发送syn(同步序列编号)包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

完成三次握手,客户端与服务器开始传送数据

5. 服务器解析、处理、返回数据

服务器通过种种层级、方式拿到传递的数据,对数据进行分析、处理,最后返回响应类MIME类型数据。正常状态码为200,非正常的错误码有404、500、501等等

PHP开发Web应用时所的请求需要指向具体的入口文件。

WebServer监听端口传输数据

WebServer(web服务器)是一个内容分发者,他接受用户的请求后,

如果请求的是css、js等静态文件,WebServer会找到这个文件,然后发送给浏览器;

如果请求的是.php,根据配置文件,去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。

WebServer会依据CGI协议,将请求的Url、数据、Http Header等信息发送给PHP解析器,接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。

FastCGI协议

这里的PHP解析器就是实现了CGI协议的程序,每次请求到来时他会解析php.ini文件,初始化执行环境,这就导致PHP解析器性能低下,于是就出现了CGI的改良升级版FastCGI。

FastCGI是一种语言无关的协议,用来沟通程序(如PHP, Python, Java)和Web服务器(Apache2, Nginx), 理论上任何语言编写的程序都可以通过FastCGI来提供Web服务。

它的特点是会在动态分配处理进程给请求,以达到提高效率的目的,大多数FastCGI实现都会维护一个进程池。

FastCGI会先启一个master进程,解析配置文件,初始化执行环境(这里是一次),然后再启动多个worker进程。当请求过来时,master进程会把这个请求传递给一个worker进程然后立即接受下一个请求。而且当worker进程不够用时,master可以根据配置预先启动几个worker进程等待;当然空闲worker进程太多时,也会自动关闭,这样就提高了性能,节约了系统资源。整个过程FastCGI扮演着对CGI进程进行管理的角色。

但是worker进程数量有限,是阻塞执行。有多少worker进程就处理多少个请求。

PHP-FPM程序

PHP-FPM是一个专门针对PHP实现了FastCGI协议的程序,它实际上就是一个PHP FastCGI进程管理器,负责管理一个进程池,调用PHP解析器来处理来自Web服务器的请求。PHP-FPM能够对php.ini文件的修改进行平滑过度。

6. 浏览器获得、渲染、展现数据

浏览器从服务器拿到数据、通过加载资源、渲染页面等操作,将页面展现给用户。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值