Blink生命周期

2018-11-25 21:59 更新

Blink生命周期

前面关于 Blink部分有过介绍,Blink 不像其他运行在 php-fpm 或者 mod_php 之上的传统 PHP 框架,它的生命周期 也是很不相同的,在使用 Blink 进行应用开发时,我们需要时刻牢记这一点,以减少不必要的困惑。

在 php-fpm 或者 mod_php 中,几乎所有的资源(诸如像对象、数据库链接等)都仅仅存在于一个请求之间,所有的这些资源都会在请求结束时释放。这样的 工作机制对于小规模的应用是没什么问题的,但对于大规模的应用,其所带来的性能开销是不可忽视的。这也是为什么 Blink 存在的原因,在 Blink 中, 我们尽最大努力减少资源的重复申请与释放,获得尽可能高的性能。

为此,Blink 的生命周期会比 php-fpm 或者 mod_php 之类更加复杂,我们在开发 Blink 应用的时候也需要谨慎的处理资源的申请与释放。一个 Blink 应用的有三个阶段,启动阶段、请求处理阶段和退出阶段,下面就每个阶段进行详细介绍:

启动阶段

首先,Blink 采用子进程来处理用户请求,每个子进程包含一个 Blink 应用程序(也就是一个 Blink Application 实例),每个应用会随着子进程的创建 而创建。

一旦 Blink 应用创建好后,$application->bootstrap() 方法将会被调用,启动应用,在这个方法中主要会做以下几件事情:

  1. 设置应用的配置信息,比如默认时区
  2. 注册应用服务,如日志、errorHandler等
  3. 注册路由

一旦应用启动成功,他就会等待并处理服务器发送过来的请求。

请求处理

应用启动之后,就会开始等待处理请求,当有请求到来的时候,$application->handleRequest() 将会被调用来处理这个请求,下面是一个请求处理的 过程:

  1. 路由分发,通过预先定义好的路由找到对应的控制器
  2. 创建对应控制器实例
  3. 调用注册好的 Request 中间件
  4. 执行控制器对应的 Action
  5. 调用注册好的 Response 中间件
  6. 结束请求并把数据返回给服务器

与 php-fpm 或 mod_php 相比,Blink 很重要的不同就是一个应用同时处理多个请求。在这多个请求之间,Application 对象及其注册在其之上的服务 都是一直存在并且能够很好的复用,尽量减少了不必要的重新申请资源的开销。也正是因为这个原因,Blink 比 php-fpm 或 mod_php 的性能要高许多。

退出阶段

当一个应用(或者子进程)达到了 maxRequests 最大处理请求数量的限制或者接收到 TERM 信号时,该应用就会自动退出,对应进程内部的所有资源和 数据库链接都会被释放。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号