生命周期
框架生命周期
Swoft 的一切都是建立在 Swoole 扩展之上运行的,想要了解整个生命周期就必须要了解 Swoole 的生命周期,此部分可查阅 Swoole文档 获得更多的资料。
在 Swoft 服务启动阶段,我们主要关注 OnWorkerStart 事件,此事件会在 Worker
启动的时候触发,这个过程也是 Swoft
众多机制实现的关键,这时 Swoft
会
- 扫描目录
- 读取配置文件
- 收集注解信息
- 收集事件监听器
- …
然后根据扫描到的注解信息执行对应的功能逻辑,并储存在与注解相对应的 Collector
容器内,包括但不限于注册路由信息,注册事件监听器,注册中间件,注册过滤器等等。
请求生命周期
每一个请求的开始到结束,都是由 Swoole 本身的 onRequest()
或 onReceive()
事件监听并委托给 Dispatcher
来处理并响应的,而 Dispatcher
的主要职责是负责调度请求生命周期内的各个参与者(组件)。
HTTP Server
在 HTTP Server
的情况下,将由 ServerDispatcher
来负责调度,参与者主要包括 RequestContext
, ExceptionHandler
, RequestHandler
。
RequestContext(请求上下文)
作为当前的请求信息的容器将贯穿整个请求生命周期,负责信息的储存和传递;ExceptionHandler(异常处理器)
则是在遇到异常的情况下出来收拾场面的,确保在各种异常情况下依旧能给客户端返回一个预期内的结果;RequestHandler(请求处理器)
则是整个请求生命周期的核心组件,其实也就是Middleware(中间件)
,该组件实现了 PSR-15 协议- 负责将
Request -> Router -> Controller -> Action -> Renderer -> Response
这整个请求流程贯穿起来,其实也就是从Request
到Response
的过程 - 只要在任意一个环节返回一个有效的
Response
对象便能对该请求做出响应并返回。
- 负责将
下面是一张请求生命周期的流程示意图:
RPC Server
在 RPC Server
的情况下,由 ServiceDispatcher
来负责调度,与 HTTP Server
类似,区别在于参与者只有 RequestContext
和 RequestHandler
,而 RequestHandler
内的 Middleware
也和 HTTP Server
的类似
比较明显的区别在于 RPC Server
下会有一个 ServicePacker(数据打包器)
来负责将服务方法或异常返回的数据打包成一个统一的数据格式,并返回给客户端。