PHP et RabbitMQ : Comment créer un système de communication en temps réel évolutif
Introduction
À l'ère d'Internet d'aujourd'hui, la communication en temps réel est devenue une exigence essentielle pour de nombreuses applications. Lors de la création d’un système de communication en temps réel évolutif, il est crucial de choisir le bon service de file d’attente de messages. RabbitMQ, en tant que courtier de messages fiable, est largement utilisé pour créer des systèmes de communication en temps réel. Cet article expliquera comment utiliser PHP et RabbitMQ pour créer un système de communication en temps réel évolutif et utilisera des exemples de code pour aider les lecteurs à comprendre en profondeur.
Présentation de RabbitMQ
RabbitMQ est un courtier de messages open source, implémenté sur la base du protocole AMQP (Advanced Message Queuing Protocol). Il découple les producteurs et les consommateurs de messages et met en œuvre une communication asynchrone via des files d'attente de messages. La fiabilité, la flexibilité et la grande évolutivité de RabbitMQ en font un choix idéal pour créer des systèmes de communication en temps réel.
Tout d’abord, nous devons installer le serveur RabbitMQ. RabbitMQ peut être installé via la commande suivante :
sudo apt-get install rabbitmq-server
Utilisation de RabbitMQ en PHP
PHP fournit des extensions pour interagir avec RabbitMQ, qui peuvent être installées via Composer :
composer require php-amqplib/php-amqplib
Exemple : Envoyer un message
<?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(); ?>
Exemple : Recevoir un message
<?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(); ?>
Tout d'abord, nous devons créer un producteur de messages pour recevoir les messages des utilisateurs et les envoyer à la file d'attente des messages :
<?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(); ?>
Ensuite, nous pouvons créer plusieurs consommateurs de messages pour recevoir les messages de la file d'attente des messages. Recevoir des messages et les diffuser à tous utilisateurs en ligne :
<?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(); ?>
Résumé
Avec PHP et RabbitMQ, nous pouvons construire un système de communication en temps réel évolutif. Cet article présente les concepts de base et les méthodes d'installation de RabbitMQ, et donne des exemples de code pour utiliser PHP et RabbitMQ pour envoyer et recevoir des messages. Enfin, à travers un cas de système de chat en temps réel, il montre comment utiliser RabbitMQ pour implémenter la fonction de diffusion de messages. J'espère que cet article aidera les lecteurs à comprendre et à appliquer PHP et RabbitMQ pour créer un système de communication en temps réel évolutif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!