Maison > Article > développement back-end > Transmission de messages en temps réel à l'aide de PHP et ZMQ
Avec le développement continu de la technologie Internet, la transmission de messages en temps réel est devenue de plus en plus importante. Dans de nombreux scénarios d’application, l’envoi de messages en temps réel peut grandement améliorer l’expérience utilisateur et l’efficacité. Par exemple, dans les applications sociales, la transmission en temps réel des messages d'amis peut permettre aux utilisateurs de comprendre plus rapidement les mises à jour de leurs amis dans les jeux en ligne ; la transmission en temps réel des événements de jeu peut permettre aux utilisateurs de jouer à des jeux plus fluides lors des transactions boursières ; , poussée en temps réel des changements de cours des actions permettent aux traders de prendre des décisions plus rapides.
Il existe de nombreuses façons d'implémenter le push de messages en temps réel, l'une des méthodes les plus courantes consiste à utiliser PHP et ZMQ (ZeroMQ).
ZMQ est une bibliothèque de messagerie asynchrone hautes performances qui offre une variété de modes de messagerie, notamment requête-réponse, publication-abonnement, Push-Pull, etc. L'utilisation de ZMQ en PHP peut facilement implémenter le push de messages en temps réel.
Regardons un exemple simple de transmission de messages en temps réel.
Tout d'abord, nous devons créer un contexte ZMQ :
$context = new ZMQContext();
Ensuite, nous créons un socket ZMQ de type Push :
$push_socket = $context->getSocket(ZMQ::SOCKET_PUSH); $push_socket->bind("tcp://127.0.0.1:5555");
Ici, nous lions le socket Push au port local 5555 pour envoyer un message au client.
Ensuite, nous créons un socket ZMQ de type Pull :
$pull_socket = $context->getSocket(ZMQ::SOCKET_PULL); $pull_socket->bind("tcp://127.0.0.1:5556");
Ici, nous lions le socket Pull au port 5556 local pour recevoir les demandes d'abonnement du client.
Ensuite, nous créons un script PHP pour envoyer des messages au client :
while (true) { $msg = date("Y-m-d H:i:s") . " hello world!"; $push_socket->send($msg); sleep(1); }
Ici, nous utilisons une boucle infinie pour envoyer en continu des messages au socket Push, une fois par seconde.
Enfin, nous créons un script PHP pour recevoir les demandes d'abonnement des clients et envoyer des messages aux abonnés :
while (true) { $msg = $pull_socket->recv(); foreach ($clients as $client) { $client->send($msg); } }
Ici, nous utilisons également une boucle infinie pour attendre les demandes d'abonnement des clients et envoyer des messages à tous les abonnés.
Lorsque le client a besoin de s'abonner à un message, il lui suffit de se connecter au port lié à la socket Pull et d'envoyer un message contenant les informations d'abonnement :
$context = new ZMQContext(); $sub_socket = $context->getSocket(ZMQ::SOCKET_SUB); $sub_socket->connect("tcp://127.0.0.1:5556"); $sub_socket->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");
Ici, nous créons une socket ZMQ de type Subscribe, connectée au local port 5556. Ensuite, nous utilisons la fonction setSockOpt() pour définir les options du socket et nous abonner à tous les messages.
Enfin, nous pouvons écrire une simple page PHP et utiliser JavaScript pour obtenir l'effet de transmission de messages en temps réel. Ici, nous utilisons la bibliothèque jQuery pour le développement :
<!DOCTYPE html> <html> <head> <title>实时消息推送</title> <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script> <script> $(function() { var socket = new WebSocket("ws://127.0.0.1:8080"); socket.onmessage = function(event) { $("#messages").append("<li>" + event.data + "</li>"); } }); </script> </head> <body> <h1>实时消息推送</h1> <ul id="messages"></ul> </body> </html>
Ici, nous créons un WebSocket pour nous connecter au port local 8080, écouter les messages du serveur et afficher les messages sur la page.
En résumé, le push de messages en temps réel peut être réalisé très facilement en utilisant PHP et ZMQ. Bien entendu, de nombreuses questions doivent être prises en compte dans les applications pratiques, telles que la sécurité, la fiabilité, etc. Mais cet article vous fournit un cadre de base pour votre référence.
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!