Introduction à WebSocket en PHP : de la théorie à la pratique
Les applications web modernes nécessitent de plus en plus souvent une transmission instantanée des données entre le client et le serveur. Le cycle traditionnel requête-réponse HTTP, basé sur le long polling ou les requêtes AJAX périodiques, ne répond plus aux exigences du temps réel. C'est là qu'intervient le protocole WebSocket — une technologie permettant d'établir une connexion bidirectionnelle permanente entre le navigateur et le serveur.
Dans cet article, nous allons voir comment créer des applications temps réel en PHP avec WebSocket. Vous apprendrez à installer la bibliothèque serveur Ratchet, à écrire un simple chat et un système de notifications, ainsi que les pièges à éviter. Ce contenu s'adresse aux développeurs connaissant les bases de PHP et JavaScript.
Qu'est-ce que WebSocket et pourquoi est-ce important pour PHP ?
WebSocket est un protocole fonctionnant au-dessus de TCP. Il est initié comme une requête HTTP (handshake), après quoi la connexion est « upgradée » en un canal bidirectionnel complet. Contrairement à HTTP :
- Le serveur peut envoyer des données au client sans requête préalable.
- La connexion reste ouverte, économisant les ressources sur les handshakes répétés.
- La latence de transmission des données est minimale — millisecondes contre secondes pour le long polling.
PHP a traditionnellement été considéré comme un langage inadapté aux tâches temps réel en raison de son modèle « une requête — un processus ». Cependant, les bibliothèques modernes comme Ratchet et ReactPHP permettent d'exécuter des processus PHP de longue durée, fonctionnant comme des serveurs WebSocket indépendants. Cela ouvre des possibilités pour :
- Chats en ligne et messageries instantanées.
- Systèmes de notifications (nouveaux emails, commandes, alertes).
- Édition collaborative de documents.
- Jeux et plateformes de trading.
Installation et configuration du serveur WebSocket en PHP avec Ratchet
Pour travailler avec WebSocket en PHP, nous utiliserons la bibliothèque Ratchet (basée sur ReactPHP). L'installation se fait via Composer.
Étape 1. Créer le projet et installer les dépendances
mkdir websocket-phpcd websocket-phpcomposer require cboden/ratchetAprès l'installation, Ratchet et ReactPHP apparaîtront dans le dossier vendor.
Étape 2. Créer la classe du serveur WebSocket
Créez le fichier server.php :
<?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 "Déconnexion : {$conn->resourceId}"; }
public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Erreur : {$e->getMessage()}"; $conn->close(); }}Étape 3. Lancer le serveur
Ajoutez le code de lancement dans server.php :
use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
require __DIR__ . '/vendor/autoload.php';
$server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080);
echo "Serveur WebSocket démarré sur le port 8080";$se