WebSocket en PHP : créer des applications en temps réel à partir de zéro

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

WebSocket en PHP : création d'applications temps réel à partir de zéro



Les applications web modernes nécessitent une réaction instantanée aux actions des utilisateurs. Le protocole HTTP standard, fonctionnant selon le principe « requête-réponse », est peu adapté aux tâches où les données doivent être mises à jour en temps réel — chats, notifications, cotations boursières ou jeux en ligne. La solution à ce problème est WebSocket. Dans cet article, nous allons voir comment implémenter WebSocket en PHP, créer un chat simple et examiner les meilleures pratiques.



Qu'est-ce que WebSocket et pourquoi en a-t-on besoin en PHP ?



WebSocket est un protocole de communication qui assure une connexion bidirectionnelle permanente entre le client (navigateur) et le serveur. Contrairement à HTTP, une fois la connexion établie, les données peuvent être transmises dans les deux sens à tout moment sans requêtes répétées. C'est essentiel pour les applications temps réel.



PHP est traditionnellement considéré comme un langage pour la logique serveur, fonctionnant selon le schéma « lancement-exécution-achèvement ». Cependant, avec l'apparition de bibliothèques asynchrones comme Ratchet et ReactPHP, PHP est devenu un outil à part entière pour créer des serveurs WebSocket. Les principaux avantages de l'utilisation de WebSocket en PHP :



  • Livraison instantanée des données — sans délais dus aux requêtes HTTP répétées.
  • Réduction de la charge serveur — une seule connexion remplace des dizaines de requêtes Long Polling.
  • Simplicité d'intégration — si votre projet est déjà en PHP, pas besoin de changer de stack technologique.


Installation et configuration de la bibliothèque Ratchet



Pour travailler avec WebSocket en PHP, nous utiliserons la bibliothèque Ratchet (en combinaison avec ReactPHP). L'installation se fait via Composer :



composer require cboden/ratchet


Après l'installation, créons une classe de base pour le serveur WebSocket. Dans Ratchet, le serveur est implémenté via l'interface MessageComponentInterface, qui contient quatre méthodes :



  • onOpen — appelée lors de la connexion d'un nouveau client.
  • onMessage — traite un message entrant.
  • onClose — déclenchée lors de la déconnexion d'un client.
  • onError — gère les erreurs de connexion.


Exemple d'un serveur très simple :



<?phpuse Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;

class ChatServer implements MessageComponentInterface { protected $clients;

public function __construct() { $this->clients = new \\SplObjectStorage; }

public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "Nouvelle connexion : {$conn->resourceId}"; }

public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } }

public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connexion {$conn->resourceId} fermée"; }

public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Erreur : {$e->getMessage()}"; $conn->close(); }}


Lancement du serveur WebSocket et partie cliente



Pour lancer le serveur, créons un script server.php :



<?phprequire __DIR__ . '/vendor/autoload.php';

use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;

$server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080);

echo "Serveur WebSocket démarré sur le port 8080";$server->run();


Lancez le serveur avec la commande :



php server.php

Blogs

Book Recommendations