前文讲到swoft创建了异步http-server,然后在调用server->set()前开启了一键协程化.

开启协程后,swoft对Server进行了一系列初始化设置,并且调用与之对应的生命周期钩子函数.

设置Server的基础配置:
image
image

设置Server的事件回调(由于打印结果非常长,此处只截取部分信息):
image
start回调:
image
image
onStart方法继承于:
\Swoft\Server\Server文件目录/vendor/server/src/Server.php
值得一题的是onStart代码中在设置完pid等系统参数后,开启了一个协程去执行用户注册的监听事件.也就是说用户注册的start事件是在协程环境下执行的:
image

shutdown回调:
image
image
与onStart类似,也是Server类实现了onShutdown方法,并且以协程方式执行用户注册的回调,不过开启协程的方式不同:
image

managerStart回调:
image
image
onManagerStart方法继承于Server类,代码中特别提醒了不能在manager进程中使用协程,所以回调事件是同步执行:
image

managerStop回调:
image
image
与managerStart一样,manager进程内不能使用协程:
image

workerStart回调:
image
image
回调内判断了是否在协程环境:
image

workerStop回调:
image
image
在协程内调用用户注册事件回调:
image

workerError回调:
image
image
发生error的worker有可能是manager程序,所以此回调不使用协程:
image

接下来的3个回调事件只指定了处理的对象,没有指定处理的方法,具体添加事件到Server的逻辑参考addEvent方法:
image

request回调:
image
对应处理方法:
/vendor/swoft/http-server/src/Swoole/RequestListener.php:
image
服务启动后,每一个请求都会经由此方法将swoole原生Request和Response对象进行封装后交给dispatcher去调度执行.关于此处的调度执行流程,会写在后面的专题章节中.

task回调:
image
对应处理方法:
/vendor/swoft/task/src/Swoole/TaskListener.php:
image

finish回调:
image
此处调用的是Task的FinishListener:
image

总结:

1.swoft的http-server中使用到的swoole回调一共10种,分别是onStart、onShutdown、onManagerStart、onManagerStop、onWorkerStart、onWorkerStop、onWorkerError、onRequest、onTask、onFinish.
2.一般用户注册的回调事件会放在协程内执行,但涉及到manager进程的不会,swoole不允许在manager进程内开启协程.
3.onTask、onFinish是针对task进程设置的回调.

马尔科夫尼可夫
19 声望5 粉丝

酷白发,小酒窝,主角标配的帅小伙~