ホームページ >バックエンド開発 >PHPチュートリアル >PHP で Swoole/Pool プロセス プールが Redis 永続接続を実装できるようにする方法について話しましょう

PHP で Swoole/Pool プロセス プールが Redis 永続接続を実装できるようにする方法について話しましょう

藏色散人
藏色散人転載
2023-02-08 10:50:294217ブラウズ

この記事は、PHPphp を使用して Swoole/Pool プロセス プールを介して Redis 永続接続を実現する方法を主に紹介する、php に関する関連知識を提供します。興味のある方はぜひご覧ください。皆様のお役に立てれば幸いです。 。

PHP で Swoole/Pool プロセス プールが Redis 永続接続を実装できるようにする方法について話しましょう

php Swoole | Pool プロセス プールに Redis 永続接続を実装させます

Swoole\Server の Manager 管理プロセス モジュールに基づくプロセス プール成し遂げる。複数のワークプロセスを管理できる 複数のプロセスを実装するProcessに比べて、Process\Poolはシンプルでカプセル化レベルが高い 開発者はあまりコードを書かずにプロセス管理機能を実装できる Co\Serverを使えば純粋なコルーチンスタイルを作成できる. マルチコア CPU を利用できるサーバー側プログラム。

Swoole プロセス プールは Redis データ読み取りを実装します

次の場合、WorkerStop が切断されると、Redis プロセス プールが WorkerStart を通じて開始され、Redis リスト データが永続的に読み取られます。すべての接続 すべての子プロセスをリサイクルします。

ステップ 1: コードのエンコード

ファイル: d10.php

<?php

use Swoole\Process;
use Swoole\Coroutine;

// 指定5个工作进程
$pool = new Process\Pool(5);
// 设置启用协程
$pool->set([&#39;enable_coroutine&#39; => 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(&#39;127.0.0.1&#39;, 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();

ステップ 2: Redis サービスを開始し、クライアント経由でリスト データを書き込む

これこの場合、PHP で Redis 拡張機能をインストールする必要があります

# 通过redis客户端连接
./redis-cli

127.0.0.1:6379> lpush key1 &#39;world&#39;

コードをコピー

ステップ 3: d10.phpを実行します

php d10.php

ステップ 4: プロセスを表示します

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

ステップ 5: 結果を出力する

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 ビデオ チュートリアル

以上がPHP で Swoole/Pool プロセス プールが Redis 永続接続を実装できるようにする方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はziruchu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。