生命周期

框架生命周期

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 这整个请求流程贯穿起来,其实也就是从 RequestResponse 的过程
    • 只要在任意一个环节返回一个有效的 Response 对象便能对该请求做出响应并返回。

下面是一张请求生命周期的流程示意图:

RequestLifecycle

RPC Server

RPC Server 的情况下,由 ServiceDispatcher 来负责调度,与 HTTP Server 类似,区别在于参与者只有 RequestContextRequestHandler,而 RequestHandler 内的 Middleware 也和 HTTP Server 的类似

比较明显的区别在于 RPC Server 下会有一个 ServicePacker(数据打包器) 来负责将服务方法或异常返回的数据打包成一个统一的数据格式,并返回给客户端。