十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容主要讲解“php如何让Swoole/Pool进程池实现redis持久连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何让Swoole/Pool进程池实现Redis持久连接”吧!
专业领域包括成都网站建设、成都网站制作、商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。
php 让 Swoole | Pool进程池实现Redis持久连接
进程池,基于Swoole\Server的Manager管理进程模块实现。可管理多个工作进程,相比 Process 实现多进程,Process\Pool 更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能,配合 Co\Server 可以创建纯协程风格的,能利用多核 CPU 的服务端程序。
Swoole进程池实现redis数据读取
如下案例,通过WorkerStart启动Redis进程池,并持久读取Redis列表数据;当WorkerStop断开所有连接时回收所有子进程。
第一步:编码代码
文件:d10.php
set(['enable_coroutine' => true]);
/**
* onWorkerStart 子进程启动
* @param \Swoole\Process\Pool $pool Pool对象
* @param int $workerId WorkerId当前工作进程的编号,底层会对子进程进行标号
**/
$pool->on("WorkerStart", function (Process\Pool $pool, $workerId) {
// 输出当前工作进程
echo "Worker #{$workerId} is started\n";
// 实例化化连接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}\n";
}
});
// 子进程结束
$pool->on("WorkerStop", function ($pool, $workerId) {
echo "Worker#{$workerId} is stopped\n";
});
// 启动工作进程
$pool->start();
第二步:启动Redis服务并通过客户端写列表数据
该案例需要php安装redis扩展
# 通过redis客户端连接
./redis-cli
127.0.0.1:6379> lpush key1 'world'
复制代码
第三步:运行d10.php
php d10.php
第四步:查看进程
ps aux | grep php
root 938 0.0 1.2 129164 12412 ? Ss Apr21 0:00 php-fpm: master process (/usr/local/php-8.0.1/etc/php-fpm.conf)
www 951 0.0 0.6 129164 6636 ? S Apr21 0:00 php-fpm: pool www
www 952 0.0 0.6 129164 6640 ? S Apr21 0:00 php-fpm: pool www
root 12327 0.0 1.2 126992 12800 pts/2 S+ 00:02 0:00 php d10.php
root 12328 0.0 0.7 131096 7444 pts/2 S+ 00:02 0:00 php d10.php
root 12329 0.0 0.7 131096 7448 pts/2 S+ 00:02 0:00 php d10.php
root 12330 0.0 0.7 131096 7448 pts/2 S+ 00:02 0:00 php d10.php
root 12331 0.0 0.7 131096 7448 pts/2 S+ 00:02 0:00 php d10.php
root 12332 0.0 0.7 131096 7448 pts/2 S+ 00:02 0:00 php d10.php
root 12355 0.0 0.0 112812 976 pts/3 R+ 00:09 0:00 grep --color=auto php
第五步:输出结果
php d10.php
Worker #1 is started
Worker #2 is started
Worker #3 is started
Worker #4 is started
Worker #0 is started
array(2) {
[0]=>
string(4) "key1"
[1]=>
string(5) "world"
}
Processed by Worker#1
d10.php文件运行后会一直处于阻塞状态而一直读取redis列表数据,一旦Redis列表中输出,则立刻被弹出并打印在屏幕中。
到此,相信大家对“php如何让Swoole/Pool进程池实现Redis持久连接”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!