关于php:Swoft的HttpServer启动及请求工作流程二Server的setting及回调函数

35次阅读

共计 1190 个字符,预计需要花费 3 分钟才能阅读完成。

前文讲到 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 过程设置的回调.

正文完
 0