1、设置回调函数方式
- 匿名函数
<?php $service->on('Request', function ($req, $resp) use ($a,$b){ echo 'hello world'; });
- 类静态方法
<?php //类静态方法 class A { static function B($req, $resp) { echo 'hello world'; } } $service->on('Request',A::B); $service->on('Request',array('A','B'));
- 函数
<?php //函数 function B($req, $resp) { echo 'hello world'; } $service->on('Request','B');
- 对象方法
<?php //对象方法 class A { public function B($req, $resp) { echo 'hello world'; } } $obj = new A(); $service->on('Request',array($obj,'B'));
2、进程
- Master 进程是一个多线程进程,
- Reactor 线程负责维护客户端 TCP 连接(数据缓存、拼接、拆分成完整请求数据包)、处理网络 IO、处理协议、收发数据。
- Worker 进程接受 Reactor 线程投递的请求数据包,并执行回调函数处理数据,将处理结果发给 Reactor 线程,再又 Reactor 线程发给 TCP 客户端。
- TaskWorker 进程处理 Worker 进程投递的 task 任务。
- Maneger 进程负责创建、回收 worker/task 进程。
一个更通俗的比喻,假设 Server
就是一个工厂,那 Reactor
就是销售,接受客户订单。而 Worker
就是工人,当销售接到订单后,Worker
去工作生产出客户要的东西。而 TaskWorker
可以理解为行政人员,可以帮助 Worker
干些杂事,让 Worker
专心工作。
补充:
进程:
一个进程就是一个正在运行的程序。进程会在系统中驻存,申请自己的内存空间、系统资源。进程核心内容为内存和上下文环境。资源分配最小单位。
线程:
轻量级进程,是操作系统调度(CPU调度)执行的最小单位。
线程作为进程的小老弟,只有进程拿到资源后,所有线程才能共享该进程的所有资源。当然了,一个进程可以有多个线程,但是小老弟共享了资源必须效忠老大哥,它只能属于大哥一个人。
然后我们再来说下协程。
协程:
可以简单理解为线程,但是协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。
协程容器:
看做启用协程的入口,所有的协程都必须在协程容器中创建。
管道:
协程间的消息队列,用作协程之间的通讯。(只能进程里的协程间通讯,无法跨进程通讯)
3、server 两种运行模式
SWOOLE_PROCESS 进程模式,适用业务逻辑复杂的场景,提供了进程管理、内存保护机制。涉及多个进程间通信。
SWOOLE_BASE 传统异步非阻塞,直接由 worker 进程负责连接和执行。性能更好。
参考文章:https://blog.csdn.net/daaikuaichuan/article/details/82951084