一、swoole介绍
Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。
Swoole严格来说是php的扩展,不是框架
.
.
.
二、swoole的主要角色
1、Master进程
swoole 的主要进程,处理核心的事件,比如客户端的连接,本地通讯的管道。(由于 Work 进程不是 Master 进程 fork出来的,所以可能会出现强行 kill 掉Master进程后,出现 Worker 进程依然在运行的情况)
(1)reactor线程
是在Master进程中比较重要的一种线程,专门负责接收TCP请求和解析(还有负责发送TCP请求),然后把数据包发给 Worker 进程处理(做了类型nignx的工作,传递请求)
(2)UDP接收包线程
接收UDP协议请求
.
2、Manager进程
负责 fork 、维护和管理 Worker / Task进程
(1)Worker进程
以多进程方式运行,每个子进程负责接收由reactot线程投递的数据包,并执行php回调函数处理,然后生成响应数据并且发送给reactor线程,由reactor线程以TCP协议发送给客户端
说的直白点,就是负责执行php业务代码逻辑的,实际开发中,设置Work进程的work_num最多只能设置到CPU核数的1~4倍(work_num = cpu核数 * 核数的1~4倍)
(2)Task进程
功能与Worker进程类似,也是以多进程的方式运行,但仅用于任务分发。当Worker进程将任务异步分发到任务队列时,Task进程负责从队列中消费这些任务(同步阻塞的方式),处理完成后将结果返回给Work进程
在实际开发,会使用 OnTask() 函数分发任务
.
3、对于在实际开发中的思考
我们日常开发中主要关注的是 Worker 进程的回调函数,只需要在服务器实例上监听相应的事件,并编写对应的回调函数来处理相应的业务逻辑即可,也可以在回调函数用onTask函数向Task进程投递异步任务。
有一个很好的比喻,Swoole应用服务器是一个工厂,那Reactor就是销售,接受客户(客户端)订单。而Worker就是工人,当销售接到订单后,Worker去工作生产出客户要的东西。而Task可以理解为行政人员,可以帮助Worker干些杂事,让Worker专心工作
4、课外拓展
什么是协程?
要想理解协程,需要先理解什么是进程和线程,因为协程是在线程下运行的,协程可以说是轻量级线程。协程的创建、切换、挂