Utilisez PHP pour développer Websocket afin d'implémenter la fonction de chat instantané
Websocket est un protocole de communication full-duplex, adapté aux scénarios de communication en temps réel, tels que le chat instantané, les mises à jour de données en temps réel, etc. En tant que langage de programmation côté serveur populaire, PHP peut également implémenter des fonctions Websocket via des bibliothèques et des extensions associées. Dans cet article, nous présenterons comment utiliser PHP pour développer Websocket. Les exemples de code spécifiques sont les suivants.
Tout d'abord, vous devez vous assurer que le serveur prend en charge le protocole Websocket. En PHP, vous pouvez utiliser la bibliothèque Ratchet pour implémenter un serveur Websocket. Ratchet est une bibliothèque basée sur ReactPHP qui fournit une interface de fonctionnement simple et flexible.
Utilisez Composer pour installer la bibliothèque Ratchet, qui peut être exécutée dans le répertoire du projet via la commande suivante :
composer require cboden/ratchet
Créez un fichier nommé server.php dans le répertoire racine du fichier projet et écrivez le code suivant :
<?php require __DIR__.'/vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; 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 occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); echo "Server running at http://localhost:8080 "; $server->run();
Entrez le répertoire racine du projet sur la ligne de commande et exécutez la commande suivante pour démarrer le serveur Websocket :
php -f server.php
À ce stade , le serveur Websocket a été démarré et écoute sur le port 8080. Il est accessible via http://localhost:8080.
Créez un fichier nommé index.html dans le répertoire du projet et écrivez le code suivant :
<!DOCTYPE html> <html> <head> <title>Websocket Chat</title> <script> var socket = new WebSocket("ws://localhost:8080"); socket.onopen = function(event) { console.log("Socket opened"); }; socket.onmessage = function(event) { console.log("Message received: " + event.data); }; socket.onclose = function(event) { console.log("Socket closed"); }; function sendMessage() { var message = document.getElementById("message").value; socket.send(message); } </script> </head> <body> <input type="text" id="message" placeholder="Type a message"> <button onclick="sendMessage()">Send</button> </body> </html>
Ouvrez le fichier index.html dans le navigateur et vous verrez un fichier pour envoyer des messages zones de saisie et boutons. Saisissez le message dans la zone de saisie et cliquez sur le bouton Envoyer pour envoyer le message au serveur.
Ouvrez plusieurs fenêtres ou onglets du navigateur, saisissez respectivement différents messages et cliquez sur le bouton d'envoi. Vous constaterez que le message sera diffusé à tous les clients connectés.
À ce stade, nous avons développé avec succès un simple serveur Websocket utilisant PHP pour implémenter la fonction de chat instantané. Grâce à l'encapsulation de la bibliothèque Ratchet, nous pouvons rapidement implémenter des applications Websocket complexes. J'espère que cet article vous sera utile et je vous souhaite une bonne programmation !
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!