Redis メッセージ サブスクリプションを継続的に監視し、PHP でイベントをトリガーするにはどうすればよいですか?
Redis は、高性能の Key-Value データベースであり、従来の Key-Value ストレージ機能に加えて、サブスクリプションおよびパブリッシング システムもサポートしており、複数のクライアントがメッセージ パッシングを通じて通信できるようになります。 PHP では、Redis のサブスクリプション機能を使用して、Redis メッセージを継続的に監視し、メッセージの受信時に対応するイベントをトリガーできます。
始める前に、サーバーに Redis がインストールされており、PHP Redis 拡張機能がインストールされていることを確認してください。
まず、Redis メッセージをリッスンするためのサブスクライバー オブジェクトを作成する必要があります。 $redis = new Redis()
を使用して Redis オブジェクトを作成し、$redis->subscribe()
メソッドを使用してサブスクライブできます。以下は簡単なサンプル コードです。
$redis = new Redis(); $redis->pconnect('127.0.0.1', 6379); // 连接Redis服务器 $redis->subscribe(['channel1'], function ($redis, $channel, $message) { // 接收到消息时触发的事件 echo "Received message from channel: $channel "; echo "Message: $message "; });
上記のコードでは、Redis サーバーに接続し、subscribe()
メソッドを使用して channel1# という名前のチャネルにサブスクライブします。 ## チャンネル。メッセージを受信すると、匿名関数のコードが呼び出され、受信したメッセージが処理されます。
subscribe() メソッドのパラメータに渡すことができます。例:
['channel1', 'channel2', 'channel3']。
while (true) { $redis->subscribe(['channel1'], function ($redis, $channel, $message) { // 接收到消息时触发的事件 echo "Received message from channel: $channel "; echo "Message: $message "; }); }
$redis = new Redis(); $redis->pconnect('127.0.0.1', 6379); // 连接Redis服务器 $channels = ['channel1', 'channel2', 'channel3']; $threads = []; foreach ($channels as $channel) { $pid = pcntl_fork(); if ($pid === -1) { die('Could not fork'); } elseif ($pid) { // 在父进程中,继续循环创建子进程 $threads[$pid] = $pid; } else { // 在子进程中,订阅消息 $redis->subscribe([$channel], function ($redis, $channel, $message) { // 接收到消息时触发的事件 echo "Received message from channel: $channel "; echo "Message: $message "; // 子进程退出 exit(); }); } } // 父进程等待所有子进程退出 foreach ($threads as $pid) { pcntl_waitpid($pid, $status); }
pcntl_fork を通じて複数のサブコードを作成します。 () 関数プロセス。各子プロセスは独立してチャネルにサブスクライブし、メッセージの受信時に対応するイベントをトリガーします。親プロセスは、終了する前にすべての子プロセスが終了するのを待つ責任があります。
以上がRedis メッセージ サブスクリプションの継続的な監視を実装し、PHP でイベントをトリガーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。