Les WebSockets fournissent un canal de communication en temps réel en duplex intégral sur une seule connexion TCP. Contrairement à HTTP, où le client envoie des requêtes au serveur et attend une réponse, les WebSockets permettent une communication continue entre le client et le serveur sans avoir besoin de plusieurs requêtes. Ceci est idéal pour les applications qui nécessitent des mises à jour en temps réel, telles que les applications de chat, les notifications en direct et les jeux en ligne.
Dans ce guide, nous explorerons les WebSockets, leur fonctionnement et comment les implémenter en PHP.
Les WebSockets permettent une communication interactive entre un navigateur Web (ou tout autre client) et un serveur. Voici les aspects clés des WebSockets :
Pour implémenter WebSockets en PHP, vous pouvez utiliser une bibliothèque telle que Ratchet, une bibliothèque PHP spécialement conçue pour la communication bidirectionnelle en temps réel à l'aide de WebSockets.
Tout d'abord, vous devez installer la bibliothèque Ratchet. En supposant que Composer soit installé, vous pouvez exécuter la commande suivante :
composer require cboden/ratchet
Créons un simple serveur WebSocket qui gérera les connexions et les messages.
<?php use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; class WebSocketServer implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; } // Called when a new client connects public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection: ({$conn->resourceId})\n"; } // Called when a client sends a message public function onMessage(ConnectionInterface $from, $msg) { echo "New message: $msg\n"; foreach ($this->clients as $client) { if ($from !== $client) { // Send the message to everyone except the sender $client->send($msg); } } } // Called when a connection is closed public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: ({$conn->resourceId})\n"; } // Called if an error occurs public function onError(ConnectionInterface $conn, \Exception $e) { echo "Error: {$e->getMessage()}\n"; $conn->close(); } }
Cette classe implémente MessageComponentInterface de Ratchet, qui définit des méthodes de gestion des nouvelles connexions, des messages entrants, des connexions fermées et des erreurs.
Créez un nouveau script PHP pour démarrer le serveur WebSocket, par exemple start_server.php.
<?php require __DIR__ . '/vendor/autoload.php'; use Ratchet\Http\HttpServer; use Ratchet\Server\IoServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new WebSocketServer() ) ), 8080 // Port number for the WebSocket server ); $server->run();
Vous pouvez démarrer le serveur en exécutant ce script :
php start_server.php
Le serveur fonctionnera désormais sur ws://localhost:8080.
Maintenant, créons un fichier HTML avec jQuery et JavaScript pour nous connecter au serveur WebSocket.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>WebSocket Chat</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <h2>WebSocket Chat</h2> <input type="text" id="message" placeholder="Enter your message"> <button id="send">Send</button> <div id="chat"></div> <script> $(document).ready(function() { var ws = new WebSocket('ws://localhost:8080'); // When receiving a message from the server ws.onmessage = function(event) { $('#chat').append('<p>' + event.data + '</p>'); }; // Sending a message to the server $('#send').click(function() { var msg = $('#message').val(); ws.send(msg); $('#message').val(''); }); }); </script> </body> </html>
Cette interface simple vous permet de saisir un message et de l'envoyer au serveur WebSocket. Tous les clients connectés recevront le message et l'afficheront.
Lorsque vous envoyez un message depuis un client, il apparaîtra dans les navigateurs de tous les clients connectés.
Les WebSockets fournissent une solution puissante pour la communication en duplex intégral en temps réel entre le client et le serveur, idéale pour les systèmes de chat, les notifications en direct et d'autres applications en temps réel. En utilisant PHP avec des bibliothèques comme Ratchet, vous pouvez facilement configurer un serveur WebSocket et l'intégrer dans vos applications pour un meilleur engagement et une meilleure réactivité des utilisateurs.
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!