基础知识

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

原文地址:https://www.cnblogs.com/suojian/p/13229571.html