PHP を使用して Redis メッセージ サブスクリプションを継続的に監視し、複数のサーバーからのメッセージを処理する方法
インターネット アプリケーションの継続的な開発により、リアルタイムのメッセージ プッシュが重要になってきました。多くの用途に必要です。高性能キャッシュ データベースとして、Redis のパブリッシュ/サブスクライブ モデルはこの需要を十分に満たすことができます。この記事では、PHP を使用して Redis メッセージをサブスクライブおよび処理し、複数のサーバーが同時にメッセージをリッスンする問題を解決する方法を紹介します。
まず、Redis データベースと PHP の Redis 拡張機能がインストールされ、正しく構成されていることを確認する必要があります。 Redis および Redis 拡張機能がインストールされていない場合は、関連ドキュメントを参照してインストールできます。
次に、単純なチャット ルーム アプリケーションを例として、PHP を使用して Redis メッセージ サブスクリプションを継続的に監視し、複数のサーバーからのメッセージを処理する方法を示します。
subscriber.php
という名前の PHP ファイルを作成します。 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // Redis服务器地址和端口号 $redis->subscribe(['chat-room'], 'processMessage'); // 订阅名为chat-room的频道,并指定回调函数processMessage function processMessage($redis, $channel, $message) { // 处理接收到的消息,例如将消息推送给聊天室的在线用户 echo "Received message from channel {$channel}: {$message} "; // 在这里实现将消息推送给聊天室的在线用户的逻辑 }
publisher.php
という名前の PHP ファイルを作成します。 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // Redis服务器地址和端口号 $redis->publish('chat-room', 'Hello, world!'); // 向名为chat-room的频道发布一条消息
上記のコードを通じて、単純な Redis メッセージのサブスクリプションおよび公開機能を実装しました。 subscriber.php を実行して Redis メッセージをリッスンし、publisher.php を実行してメッセージを Redis にパブリッシュできます。メッセージが受信されると、processMessage
コールバック関数が呼び出され、この関数にメッセージ処理ロジックを実装できます。
ただし、複数のサーバーを使用してメッセージを処理し、各サーバーがsubscriber.phpを実行してRedisメッセージを継続的に監視する場合、メッセージは複数回処理され、操作が繰り返されることになります。
この問題を解決するには、Redis の PUBLISH/SUBSCRIBE 機能を使用します。 Redis メッセージをサブスクライブし、メッセージを処理するロジックを他のサーバーに転送するための追加サーバーを作成できます。以下は、変更されたコード例です。
subscriber.php
ファイルを変更します。 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // Redis服务器地址和端口号 $redis->subscribe(['chat-room'], 'processMessage'); function processMessage($redis, $channel, $message) { // 处理接收到的消息,例如将消息推送给聊天室的在线用户 echo "Received message from channel {$channel}: {$message} "; // 向其他服务器发送消息 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://other-server/process-message.php'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, [ 'channel' => $channel, 'message' => $message, ]); curl_exec($curl); curl_close($curl); }
process-message.php
という名前の新しい PHP ファイルを作成します。 <?php $channel = $_POST['channel']; $message = $_POST['message']; // 在这里实现将消息推送给聊天室的在线用户的逻辑 echo "Received message from channel {$channel}: {$message} ";
上記のコードでは、subscriber.php
ファイルを変更し、他のサーバーにメッセージを送信するロジックを追加しました。メッセージを受信すると、HTTP POST リクエストを介してメッセージを他のサーバーの process-message.php
ファイルに送信します。このファイルは、受信したメッセージをさらに処理します。
この方法で、複数のサーバーが Redis メッセージを同時にリッスンし、各メッセージが 1 回だけ処理されるようにすることができます。他のサーバーの process-message.php
ファイルがメッセージを正しく処理できる限り、そのファイルにメッセージ処理ロジックを実装できます。
これまでに、PHP を使用して Redis メッセージを継続的に監視するサブスクリプションと処理を完了し、複数のサーバーが同時にメッセージを監視する問題を解決しました。これに基づいて、独自のニーズに応じてコードを拡張および最適化し、より複雑な機能を実現できます。
以上がPHP を使用して Redis メッセージ サブスクリプションを継続的にリッスンし、複数のサーバーからのメッセージを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。