Think-Swoole教程之配置、工作进程、携程魅力的示例
创始人
2024-11-24 07:42:36
0次

配置文件:

app/config/swoole.php

'server'     => [
    'host'      => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址
    'port'      => env('SWOOLE_PORT', 9501), // 监听端口
    'mode'      => SWOOLE_PROCESS, // 运行模式 默认为SWOOLE_PROCESS
    'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP
    'options'   => [ // 都是给 Swoole 服务的配置,可以根据 Swoole 手册额外增加其它的 Swoole 配置
        'pid_file'              => runtime_path() . 'swoole.pid', //服务启动以后进程 ID 存放文件
        'log_file'              => runtime_path() . 'swoole.log', //Swoole 的日志文件
        'daemonize'             => false, //守护进程模式设置,true 后台运行
        // Normally this value should be 1~4 times larger according to your cpu cores.
        'reactor_num'           => swoole_cpu_num(), //后台启动的 Reactor 线程数
        'worker_num'            => swoole_cpu_num(), //设置启动的 Worker 进程数
        'task_worker_num'       => swoole_cpu_num(), //配置 Task 进程数
        'enable_static_handler' => true, //开启静态文件请求处理功能,需配合 document_root
        'document_root'         => root_path('public'), //配置静态文件根目录
        'package_max_length'    => 20 * 1024 * 1024, //设置最大数据包尺寸,单位为字节
        'buffer_output_size'    => 10 * 1024 * 1024, //配置发送输出缓存区内存尺寸
        'socket_buffer_size'    => 128 * 1024 * 1024, //用于设置客户端连接最大允许占用内存数量
    ],
],

工作进程:

'worker_num' => swoole_cpu_num(),

这个配置是设置工作进程的, swoole_cpu_num() 是获取本机CPU核数,如果将它手动设置为 1,那么同一时间有两个请求需要处理,一次只能处理一个,另一个处于等候状态,第一个处理完后会紧接着处理第二个,但他们还是属于一个进程,两个请求的进程号是一样的。如何设置为 2,那么同时可以处理 2 个请求,并且有两个不同的进程号。

协程

在 Swoole 的配置文件中,还有一个选项,是配置协程的:

'coroutine'  => [
        'enable' => true,
        'flags'  => SWOOLE_HOOK_ALL,
    ],

'enable' => true 代表开启协程。假设现在需要同时处理 3 个请求(也可以更多),即使工作进程设置为 1,这三个请求也可以同时进行处理,但是它们的进程号是一样的,因为工作进程还是一个。这就是 Swoole 协程的魅力。

理解 Swoole 进程模式

配置工作进程数为 1 ,然后通过命令 php think swoole 开启服务后,新开命令窗口执行 ps -ef | grep swoole 查看进程状态 ,如下图所示:

Think-Swoole教程之配置、工作进程、携程魅力的示例

当 Swoole 启动时,会首先启动一个 master 主进程,然后会启动一个 manager 管理子进程,这两个进程不会去处理请求的工作,请求的处理交给 manager 的子进程 worker。上图中可见,master 主进程的进程号 30665,manager 子进程 30666 的父进程是 30665,task process 和 worker process 的父进程都是 30666。

配置工作进程数为 2 ,重启 Swoole 服务,再次查看进程状态:

Think-Swoole教程之配置、工作进程、携程魅力的示例

可见,有两个 worker process 进程。

执行pstree -p 31568,可得到如下关系图:

Think-Swoole教程之配置、工作进程、携程魅力的示例

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...