php如何讓Swoole/Pool進(jìn)程池實(shí)現(xiàn)Redis持久連接

本篇內(nèi)容主要講解“php如何讓Swoole/Pool進(jìn)程池實(shí)現(xiàn)redis持久連接”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“php如何讓Swoole/Pool進(jìn)程池實(shí)現(xiàn)Redis持久連接”吧!

專業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、成都網(wǎng)站制作商城網(wǎng)站建設(shè)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

php 讓 Swoole | Pool進(jìn)程池實(shí)現(xiàn)Redis持久連接

進(jìn)程池,基于Swoole\Server的Manager管理進(jìn)程模塊實(shí)現(xiàn)??晒芾矶鄠€(gè)工作進(jìn)程,相比 Process 實(shí)現(xiàn)多進(jìn)程,Process\Pool 更加簡單,封裝層次更高,開發(fā)者無需編寫過多代碼即可實(shí)現(xiàn)進(jìn)程管理功能,配合 Co\Server 可以創(chuàng)建純協(xié)程風(fēng)格的,能利用多核 CPU 的服務(wù)端程序。

Swoole進(jìn)程池實(shí)現(xiàn)redis數(shù)據(jù)讀取

如下案例,通過WorkerStart啟動Redis進(jìn)程池,并持久讀取Redis列表數(shù)據(jù);當(dāng)WorkerStop斷開所有連接時(shí)回收所有子進(jìn)程。

第一步:編碼代碼

文件:d10.php

<?php

use Swoole\Process;
use Swoole\Coroutine;

// 指定5個(gè)工作進(jìn)程
$pool = new Process\Pool(5);
// 設(shè)置啟用協(xié)程
$pool->set(['enable_coroutine' => true]);

/**
* onWorkerStart 子進(jìn)程啟動
* @param \Swoole\Process\Pool $pool Pool對象
* @param int $workerId   WorkerId當(dāng)前工作進(jìn)程的編號,底層會對子進(jìn)程進(jìn)行標(biāo)號
**/
$pool->on("WorkerStart", function (Process\Pool $pool, $workerId) {
// 輸出當(dāng)前工作進(jìn)程
   echo "Worker #{$workerId} is started\n";

   // 實(shí)例化化連接redis
   $redis = new Redis();
   $redis->pconnect('127.0.0.1', 6379);
   // 指定redis鍵
   $key = "key1";

   // 循環(huán)讀取列表數(shù)據(jù)
   while (true) {
    // 彈出列表最后一個(gè)元素
       $msgs = $redis->brpop($key, 2);
       // 元素值為空則跳過
       if ( $msgs == null) {
           continue;
       }
       // 打印獲取的值
       var_dump($msgs);
       echo "Processed by Worker#{$workerId}\n";
   }
});

// 子進(jìn)程結(jié)束
$pool->on("WorkerStop", function ($pool, $workerId) {
   echo "Worker#{$workerId} is stopped\n";
});

// 啟動工作進(jìn)程
$pool->start();

第二步:啟動Redis服務(wù)并通過客戶端寫列表數(shù)據(jù)

該案例需要php安裝redis擴(kuò)展

# 通過redis客戶端連接
./redis-cli

127.0.0.1:6379> lpush key1 'world'

復(fù)制代碼

第三步:運(yùn)行d10.php

php d10.php

第四步:查看進(jìn)程

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

第五步:輸出結(jié)果

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文件運(yùn)行后會一直處于阻塞狀態(tài)而一直讀取redis列表數(shù)據(jù),一旦Redis列表中輸出,則立刻被彈出并打印在屏幕中。

到此,相信大家對“php如何讓Swoole/Pool進(jìn)程池實(shí)現(xiàn)Redis持久連接”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁名稱:php如何讓Swoole/Pool進(jìn)程池實(shí)現(xiàn)Redis持久連接
URL分享:http://muchs.cn/article14/gheoge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、小程序開發(fā)全網(wǎng)營銷推廣、微信小程序、網(wǎng)站排名、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營