PHP と RabbitMQ: スケーラブルなリアルタイム通信システムを構築する方法
はじめに
今日のインターネット時代において、リアルタイム通信は多くのアプリケーションにとって中核的な要件となっています。スケーラブルなリアルタイム通信システムを構築する場合、適切なメッセージ キュー サービスを選択することが重要です。 RabbitMQ は、信頼性の高いメッセージ ブローカーとして、リアルタイム通信システムの構築に広く使用されています。この記事では、PHP と RabbitMQ を使用してスケーラブルなリアルタイム通信システムを構築する方法を紹介し、コード例を使用して読者が深く理解できるようにします。
RabbitMQ の概要
RabbitMQ は、AMQP (Advanced Message Queuing Protocol) プロトコルに基づいて実装されたオープン ソースのメッセージ ブローカーです。メッセージのプロデューサーとコンシューマーを分離し、メッセージ キューを介した非同期通信を実装します。 RabbitMQ は信頼性、柔軟性、高い拡張性を備えているため、リアルタイム通信システムを構築するのに理想的な選択肢となります。
まず、RabbitMQ サーバーをインストールする必要があります。 RabbitMQ は、次のコマンドでインストールできます:
sudo apt-get install rabbitmq-server
PHP での RabbitMQ の使用
PHP には、Composer を通じてインストールできる RabbitMQ と対話するための拡張機能が用意されています:
composer require php-amqplib/php-amqplib
例: メッセージの送信
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; // 创建连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明队列 $channel->queue_declare('hello', false, false, false, false); // 创建消息 $message = new AMQPMessage('Hello World!'); // 发送消息 $channel->basic_publish($message, '', 'hello'); echo " [x] Sent 'Hello World!' "; // 关闭连接 $channel->close(); $connection->close(); ?>
例: メッセージの受信
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; // 创建连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明队列 $channel->queue_declare('hello', false, false, false, false); echo " [*] Waiting for messages. To exit press CTRL+C "; // 定义回调函数来处理接收到的消息 $callback = function ($msg) { echo ' [x] Received ', $msg->body, " "; }; // 监听队列 $channel->basic_consume('hello', '', false, true, false, false, $callback); // 循环等待消息 while ($channel->is_consuming()) { $channel->wait(); } // 关闭连接 $channel->close(); $connection->close(); ?>
まず、ユーザーからメッセージを受信してメッセージ キューに送信するメッセージ プロデューサーを作成する必要があります。
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; // 创建连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明交换机 $channel->exchange_declare('chat_exchange', 'fanout', false, false, false); while (true) { // 从标准输入读取用户输入的消息 $message = readline(); // 创建消息 $amqpMessage = new AMQPMessage($message); // 发布消息到交换机 $channel->basic_publish($amqpMessage, 'chat_exchange'); echo " [x] Sent '$message' "; } // 关闭连接 $channel->close(); $connection->close(); ?>
次に、受信に使用される複数のメッセージ コンシューマーを作成できます。メッセージ キューからメッセージを取得し、すべてのオンライン ユーザーにブロードキャストします。
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; // 创建连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明交换机 $channel->exchange_declare('chat_exchange', 'fanout', false, false, false); // 声明临时队列 list($queueName, ,) = $channel->queue_declare('', false, false, true, false); // 将临时队列绑定到交换机 $channel->queue_bind($queueName, 'chat_exchange'); echo " [*] Waiting for messages. To exit press CTRL+C "; // 定义回调函数来处理接收到的消息 $callback = function ($msg) { echo ' [x] Received ', $msg->body, " "; }; // 监听队列 $channel->basic_consume($queueName, '', false, true, false, false, $callback); // 循环等待消息 while ($channel->is_consuming()) { $channel->wait(); } // 关闭连接 $channel->close(); $connection->close(); ?>
概要
PHP と RabbitMQ を通じて、スケーラブルなリアルタイム通信システムを構築できます。この記事では、RabbitMQ の基本概念とインストール方法を紹介し、PHP と RabbitMQ を使用してメッセージを送受信するためのコード例を示します。最後に、リアルタイム チャット システムの事例を通じて、RabbitMQ を使用してメッセージ ブロードキャスト機能を実装する方法を示します。この記事が、読者が PHP と RabbitMQ を理解し、適用してスケーラブルなリアルタイム通信システムを構築するのに役立つことを願っています。
以上がPHP と RabbitMQ: スケーラブルなリアルタイム通信システムを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。