前文讲到 swoft 创立了异步 http-server, 而后在调用 server->set()前开启了一键协程化.
开启协程后,swoft 对 Server 进行了一系列初始化设置, 并且调用与之对应的生命周期钩子函数.
设置 Server 的根底配置:
设置 Server 的事件回调 (因为打印后果十分长, 此处只截取局部信息):
start 回调:
onStart 办法继承于:\Swoft\Server\Server
文件目录 /vendor/server/src/Server.php
值得一题的是 onStart 代码中在设置完 pid 等零碎参数后, 开启了一个协程去执行用户注册的监听事件. 也就是说用户注册的 start 事件是在协程环境下执行的:
shutdown 回调:
与 onStart 相似, 也是 Server 类实现了 onShutdown 办法, 并且以协程形式执行用户注册的回调, 不过开启协程的形式不同:
managerStart 回调:
onManagerStart 办法继承于 Server 类, 代码中特地揭示了 不能在 manager 过程中应用协程, 所以回调事件是同步执行:
managerStop 回调:
与 managerStart 一样,manager 过程内不能应用协程:
workerStart 回调:
回调内判断了是否在协程环境:
workerStop 回调:
在协程内调用用户注册事件回调:
workerError 回调:
产生 error 的 worker 有可能是 manager 程序, 所以此回调 不应用协程:
接下来的 3 个回调事件只指定了解决的对象, 没有指定解决的办法, 具体增加事件到 Server 的逻辑参考 addEvent 办法:
request 回调:
对应解决办法:/vendor/swoft/http-server/src/Swoole/RequestListener.php
:
服务启动后, 每一个申请都会经由此办法将 swoole 原生 Request 和 Response 对象进行封装后交给 dispatcher 去调度执行. 对于此处的调度执行流程, 会写在前面的专题章节中.
task 回调:
对应解决办法:/vendor/swoft/task/src/Swoole/TaskListener.php
:
finish 回调:
此处调用的是 Task 的 FinishListener:
总结:
1.swoft 的 http-server 中应用到的 swoole 回调一共 10 种, 别离是 onStart、onShutdown、onManagerStart、onManagerStop、onWorkerStart、onWorkerStop、onWorkerError、onRequest、onTask、onFinish.
2. 个别用户注册的回调事件会放在协程内执行, 但波及到 manager 过程的不会,swoole 不容许在 manager 过程内开启协程.
3.onTask、onFinish 是针对 task 过程设置的回调.