聊聊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();

登录后复制

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 聊聊php怎么让Swoole/Pool进程池实现Redis持久连接
温馨提示您:本站所载文章、数据仅供参考,如果有文章侵犯了您的权益,请来信告知我们删除,联系邮箱:976157886@qq.com
Copyright © 2023 自学咖网 - All rights reserved 浙ICP备2023005527号