Les applications Web sont de plus en plus populaires sur l'Internet moderne, et ces applications peuvent offrir une expérience utilisateur et une interaction riches. Cependant, le modèle de requête-réponse HTTP traditionnel présente certaines limites en termes de performances et d'efficacité en temps réel. Pour résoudre ce problème, WebSocket a vu le jour. WebSocket est un protocole de communication full-duplex qui permet une communication en temps réel entre clients et serveurs. Dans cet article, nous expliquerons comment créer des applications Web en temps réel à l'aide de PHP et WebSocket.
WebSocket est un protocole de communication full-duplex basé sur TCP qui permet une communication bidirectionnelle sur la même connexion TCP. Le protocole HTTP traditionnel permet uniquement une communication requête-réponse unidirectionnelle entre le client et le serveur. Avec le protocole WebSocket, une fois la connexion établie, le client et le serveur peuvent envoyer des données à tout moment sans attendre les requêtes. Cette nature temps réel et cette efficacité rendent le protocole WebSocket adapté au développement d'applications Web en temps réel.
Dans les applications Web en temps réel, les opérations utilisateur et les mises à jour des données doivent être renvoyées à l'utilisateur en temps opportun pour offrir une meilleure expérience utilisateur. Le modèle de requête-réponse HTTP traditionnel présente un certain retard et ne peut pas répondre aux besoins de communication en temps réel. De plus, le modèle requête-réponse HTTP impose également une charge élevée sur le serveur. Chaque requête nécessite une nouvelle connexion, ce qui augmente la surcharge de communication. Par conséquent, l'utilisation de WebSocket peut améliorer les performances en temps réel et réduire la charge sur le serveur.
En PHP, vous pouvez facilement créer un serveur WebSocket à l'aide de la bibliothèque Ratchet. Ratchet est une bibliothèque WebSocket pour PHP. Elle fournit une implémentation du protocole WebSocket et peut facilement créer des serveurs et des clients WebSocket, ce qui nous permet de développer plus facilement des applications Web en temps réel. Vous trouverez ci-dessous les étapes pour créer un serveur WebSocket à l'aide de Ratchet.
Étape 1 : Installer la bibliothèque Ratchet
Vous pouvez utiliser l'outil Composer pour installer la bibliothèque Ratchet. Exécutez la commande suivante dans le terminal :
composer require cboden/ratchet
Étape 2 : Créer une classe serveur
Dans la classe serveur, nous devons remplacer deux méthodes : onOpen et onMessage. La méthode onOpen est appelée lorsque la connexion est établie et la méthode onMessage est appelée lorsqu'un message est reçu. Voici un exemple simple de classe de serveur :
use RatchetMessageComponentInterface; use RatchetConnectionInterface; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection! ({$conn->resourceId}) "; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } }
Dans l'exemple ci-dessus, nous avons défini une classe appelée Chat, qui implémente l'interface MessageComponentInterface. Dans le constructeur, nous initialisons une liste de connexions $clients pour enregistrer tous les clients connectés. Dans la méthode onOpen, nous ajoutons la nouvelle connexion à la liste des connexions et enregistrons l'ID de ressource de la connexion. Dans la méthode onMessage, nous parcourons toutes les connexions et envoyons le message reçu à tous les clients à l'exception de l'expéditeur. Les méthodes onClose et onError sont utilisées pour gérer les situations de fermeture de connexion et d'erreur.
Troisième étape : exécuter le serveur
Avant d'exécuter le serveur, nous devons démarrer le serveur WebSocket dans le terminal. Vous pouvez créer un script de démarrage dans le répertoire du projet pour démarrer le serveur. Dans le script de démarrage, nous devons créer un objet serveur WebSocket, puis transmettre une instance de la classe serveur à l'objet serveur WebSocket. Voici un exemple de script de démarrage :
use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
Dans l'exemple ci-dessus, nous avons créé un objet serveur WebSocket $server, en écoute sur le port 8080. HttpServer et WsServer sont deux composants de la bibliothèque Ratchet qui gèrent les requêtes HTTP et les connexions WebSocket. Nous transmettons une instance de la classe Chat à WsServer pour gérer les événements associés une fois la connexion WebSocket établie. Enfin, démarrez le serveur WebSocket en appelant la méthode $server->run().
Après avoir créé le serveur WebSocket à l'aide de PHP, nous pouvons commencer à développer des applications Web en temps réel. Le serveur WebSocket peut enregistrer tous les clients connectés et, lors de la réception d'un message d'un client, diffuser le message à tous les clients. Nous pouvons utiliser JavaScript pour écrire du code côté client, établir une connexion WebSocket et envoyer et recevoir des données.
Ce qui suit est un exemple de code pour établir une connexion WebSocket à l'aide de jQuery :
let websocket = new WebSocket('ws://localhost:8080'); websocket.onmessage = function(event) { console.log(event.data); } $('form').submit(function(event) { event.preventDefault(); let message = $('input').val(); $('input').val(''); websocket.send(message); });
Dans l'exemple ci-dessus, nous utilisons le constructeur WebSocket pour établir une connexion WebSocket, et l'adresse de connexion est ws://localhost:8080. Dans la fonction onmessage, nous écoutons l'événement de message WebSocket et envoyons le message sur la console après l'avoir reçu. Dans l'événement de soumission du formulaire, nous récupérons le texte dans la zone de saisie et l'envoyons au serveur WebSocket.
WebSocket est un protocole qui peut réaliser une communication en temps réel et présente les caractéristiques d'une efficacité élevée et de performances en temps réel. En PHP, avec l'aide de la bibliothèque Ratchet, nous pouvons facilement créer un serveur WebSocket, rendant le développement d'applications Web en temps réel plus simple et plus efficace. À l'avenir, le protocole WebSocket deviendra un élément important du développement d'applications Web en temps réel.
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!