中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何讓Swoole/Pool進程池實現Redis持久連接

發布時間:2023-02-08 13:42:05 來源:億速云 閱讀:131 作者:iii 欄目:編程語言

本篇內容主要講解“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

<?php

use Swoole\Process;
use Swoole\Coroutine;

// 指定5個工作進程
$pool = new Process\Pool(5);
// 設置啟用協程
$pool->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持久連接”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枣阳市| 开阳县| 卢氏县| 荃湾区| 沙田区| 渭南市| 郎溪县| 伊吾县| 云浮市| 张家口市| 东丽区| 玉树县| 吴川市| 定西市| 宜都市| 通山县| 玉林市| 丰台区| 泊头市| 比如县| 巩留县| 华池县| 射洪县| 始兴县| 铜梁县| 蓝田县| 巴中市| 周口市| 安图县| 盐山县| 陆良县| 六安市| 磐石市| 阿合奇县| 张家界市| 丹棱县| 拜泉县| 法库县| 陇川县| 五常市| 凭祥市|