【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

马尔科夫尼可夫发布于 2020-12-09

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

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

设置Server的基础配置:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

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

shutdown回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
与onStart类似,也是Server类实现了onShutdown方法,并且以协程方式执行用户注册的回调,不过开启协程的方式不同:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

managerStart回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
onManagerStart方法继承于Server类,代码中特别提醒了不能在manager进程中使用协程,所以回调事件是同步执行:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

managerStop回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
与managerStart一样,manager进程内不能使用协程:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerStart回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
回调内判断了是否在协程环境:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerStop回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
在协程内调用用户注册事件回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerError回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
发生error的worker有可能是manager程序,所以此回调不使用协程:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

接下来的3个回调事件只指定了处理的对象,没有指定处理的方法,具体添加事件到Server的逻辑参考addEvent方法:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

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

task回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
对应处理方法:
/vendor/swoft/task/src/Swoole/TaskListener.php:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

finish回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
此处调用的是Task的FinishListener:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

总结:

1.swoft的http-server中使用到的swoole回调一共10种,分别是onStart、onShutdown、onManagerStart、onManagerStop、onWorkerStart、onWorkerStop、onWorkerError、onRequest、onTask、onFinish.

2.一般用户注册的回调事件会放在协程内执行,但涉及到manager进程的不会,swoole不允许在manager进程内开启协程.

3.onTask、onFinish是针对task进程设置的回调.

phpswooleswoft

阅读 119发布于 2020-12-09

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

马尔科夫尼可夫

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

7 声望

2 粉丝

0 条评论

得票时间

avatar

马尔科夫尼可夫

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

7 声望

2 粉丝

宣传栏

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

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

设置Server的基础配置:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

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

shutdown回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
与onStart类似,也是Server类实现了onShutdown方法,并且以协程方式执行用户注册的回调,不过开启协程的方式不同:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

managerStart回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
onManagerStart方法继承于Server类,代码中特别提醒了不能在manager进程中使用协程,所以回调事件是同步执行:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

managerStop回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
与managerStart一样,manager进程内不能使用协程:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerStart回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
回调内判断了是否在协程环境:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerStop回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
在协程内调用用户注册事件回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

workerError回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
发生error的worker有可能是manager程序,所以此回调不使用协程:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

接下来的3个回调事件只指定了处理的对象,没有指定处理的方法,具体添加事件到Server的逻辑参考addEvent方法:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

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

task回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
对应处理方法:
/vendor/swoft/task/src/Swoole/TaskListener.php:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

finish回调:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数
此处调用的是Task的FinishListener:
【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数

总结:

1.swoft的http-server中使用到的swoole回调一共10种,分别是onStart、onShutdown、onManagerStart、onManagerStop、onWorkerStart、onWorkerStop、onWorkerError、onRequest、onTask、onFinish.

2.一般用户注册的回调事件会放在协程内执行,但涉及到manager进程的不会,swoole不允许在manager进程内开启协程.

3.onTask、onFinish是针对task进程设置的回调.

以上是 【php】Swoft的HttpServer启动及请求工作流程(二)--Server的setting及回调函数 的全部内容, 来源链接: utcz.com/a/106814.html

回到顶部