日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本篇文章給大家帶來了關于php的相關知識,其中主要介紹了通過PHPphp讓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列表中輸出,則立刻被彈出并打印在屏幕中


分享到:
標簽:Swoole/Pool進程池Redis持久連接
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定