聊聊php怎么让Swoole/Pool进程池实现Redis持久连接
本篇文章给大家带来了关于php的相关知识,其中主要介绍了通过PHPphp让Swoole/Pool进程池实现Redis持久连接,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。
php 让 Swoole | Pool进程池实现Redis持久连接
进程池,基于SwooleServer的Manager管理进程模块实现。可管理多个工作进程,相比 Process 实现多进程,ProcessPool 更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能,配合 CoServer 可以创建纯协程风格的,能利用多核 CPU 的服务端程序。
Swoole进程池实现redis数据读取
如下案例,通过WorkerStart启动Redis进程池,并持久读取Redis列表数据;当WorkerStop断开所有连接时回收所有子进程。
第一步:编码代码
文件:d10.php
<?php use SwooleProcess; use SwooleCoroutine; // 指定5个工作进程 $pool = new ProcessPool(5); // 设置启用协程 $pool->set(['enable_coroutine' => true]); /** * onWorkerStart 子进程启动 * @param SwooleProcessPool $pool Pool对象 * @param int $workerId WorkerId当前工作进程的编号,底层会对子进程进行标号 **/ $pool->on("WorkerStart", function (ProcessPool $pool, $workerId) { // 输出当前工作进程 echo "Worker #{$workerId} is started "; // 实例化化连接redis $redis = new Redis(); $redis->pconnect('127.0.0.1', 6379); // 指定redis键 $key = "key1"; // 循环读取列表数据 while (true) { // 弹出列表最后一个元素 $msgs = $redis->brpop($key, 2); // 元素值为空则跳过 if ( $msgs == null) { continue; } // 打印获取的值 var_dump($msgs); echo "Processed by Worker#{$workerId} "; } }); // 子进程结束 $pool->on("WorkerStop", function ($pool, $workerId) { echo "Worker#{$workerId} is stopped "; }); // 启动工作进程 $pool->start();
登录后复制