Bibliothèque Ratchet pour WebSocket en PHP
Dans le développement web moderne, l'échange de données en temps réel est de plus en plus nécessaire : chats, notifications, jeux en ligne, édition collaborative de documents. Le HTTP traditionnel ne convient pas à ces tâches car il fonctionne selon le schéma « requête-réponse ». Le protocole WebSocket vient à la rescousse en établissant une connexion bidirectionnelle permanente entre le client et le serveur.
Pour PHP, l'une des bibliothèques les plus populaires et matures pour travailler avec WebSocket est Ratchet. Elle fournit une API pratique pour créer des serveurs WebSocket capables de gérer de nombreuses connexions simultanées. Dans cet article, nous allons détailler comment installer Ratchet, écrire un serveur et un client simples, et examiner les scénarios d'utilisation typiques.
Qu'est-ce que Ratchet ?
Ratchet est une bibliothèque pour PHP, construite sur ReactPHP (une boucle d'événements asynchrone). Elle permet de créer des serveurs WebSocket qui fonctionnent en temps réel, sans nécessiter de modules supplémentaires (comme ext-sockets ou ext-event). La bibliothèque prend en charge la norme RFC 6455 (WebSocket) et s'intègre facilement avec n'importe quelle application PHP.
Principales fonctionnalités de Ratchet :
- Prise en charge du protocole WebSocket (versions 13 et inférieures).
- Possibilité de créer vos propres contrôleurs pour gérer les messages.
- Prise en charge intégrée de WAMP (WebSocket Application Messaging Protocol) pour pub/sub (éditeur-abonné) et RPC (appel de procédure à distance).
- Intégration facile avec les frameworks (Laravel, Symfony) via des paquets séparés.
- Haute performance grâce à l'architecture asynchrone de ReactPHP.
Installation de Ratchet
L'installation se fait via Composer. Pour cela, à la racine de votre projet, exécutez la commande :
composer require cboden/ratchetAprès l'installation, un répertoire vendor apparaîtra dans votre projet, contenant la bibliothèque et ses dépendances (y compris ReactPHP). Assurez-vous d'avoir PHP version 7.1 ou supérieure.
Création d'un serveur WebSocket simple
Écrivons un serveur simple qui reçoit les messages des clients et les renvoie (serveur écho). Créez un fichier server.php :
<?phprequire __DIR__ . '/vendor/autoload.php';
use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
class EchoServer implements MessageComponentInterface { public function onOpen(ConnectionInterface $conn) { echo "Nouvelle connexion : {$conn->resourceId}"; }
public function onMessage(ConnectionInterface $from, $msg) { echo "Message reçu de {$from->resourceId} : {$msg}"; // Renvoie le message à l'expéditeur $from->send("Écho : {$msg}"); }
public function onClose(ConnectionInterface $conn) { echo "Connexion {$conn->resourceId} fermée"; }
public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Erreur : {$e->getMessage()}"; $conn->close(); }}
// Démarre le serveur sur le port 8080$server = IoServer::factory( new HttpServer( new WsServer( new EchoServer() ) ), 8080);
echo "Serveur WebSocket démarré sur le port 8080";$server->run();Lancez le serveur avec la commande php server.php. Il écoutera les connexions WebSocket entrantes sur le port 8080.
Création d'un client (JavaScript)
Pour tester, créez un fichier HTML simple avec un client JavaScript :
<!DOCTYPE html><html><head> <title>Client WebSocket</title></head><body> Aussi dans la bibliothèque
Génération de PDF en JavaScript (Node.js) : bibliothèques et outils
Validation des données en Swift (iOS/macOS) : outils et pratique
Travailler avec XML en Swift (iOS/macOS) : Foundation et SwiftXML
Envoi d'email en C# (.NET) avec SmtpClient et MailKit
Event Bus et le pattern Observer en JavaScript (Node.js) : implémentation et exemples