Blink生命周期
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()
方法将会被调用,启动应用,在这个方法中主要会做以下几件事情:
- 设置应用的配置信息,比如默认时区
- 注册应用服务,如日志、errorHandler等
- 注册路由
一旦应用启动成功,他就会等待并处理服务器发送过来的请求。
请求处理
应用启动之后,就会开始等待处理请求,当有请求到来的时候,$application->handleRequest()
将会被调用来处理这个请求,下面是一个请求处理的 过程:
- 路由分发,通过预先定义好的路由找到对应的控制器
- 创建对应控制器实例
- 调用注册好的 Request 中间件
- 执行控制器对应的 Action
- 调用注册好的 Response 中间件
- 结束请求并把数据返回给服务器
与 php-fpm 或 mod_php 相比,Blink 很重要的不同就是一个应用同时处理多个请求。在这多个请求之间,Application 对象及其注册在其之上的服务 都是一直存在并且能够很好的复用,尽量减少了不必要的重新申请资源的开销。也正是因为这个原因,Blink 比 php-fpm 或 mod_php 的性能要高许多。
退出阶段
当一个应用(或者子进程)达到了 maxRequests
最大处理请求数量的限制或者接收到 TERM
信号时,该应用就会自动退出,对应进程内部的所有资源和 数据库链接都会被释放。
更多建议: