Maison >développement back-end >tutoriel php >PHP et RabbitMQ : Comment créer un système de communication en temps réel évolutif

PHP et RabbitMQ : Comment créer un système de communication en temps réel évolutif

PHPz
PHPzoriginal
2023-07-17 12:53:101270parcourir

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.

  1. 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
  2. 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();
?>
  1. Construisez un système de communication en temps réel évolutif
    Avec RabbitMQ, nous pouvons construire un système de communication en temps réel évolutif. Ce qui suit est un exemple simple qui montre comment utiliser PHP et RabbitMQ pour implémenter la fonction de diffusion de messages d'un système de discussion en temps réel.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn