Qu'est-ce que WebSocket et pourquoi la bibliothèque Ratchet pour PHP est-elle nécessaire ?
WebSocket est un protocole qui assure une connexion bidirectionnelle permanente entre le client (navigateur) et le serveur. Contrairement au HTTP classique, où seuls les clients initient les requêtes, WebSocket permet au serveur d'envoyer des données instantanément, sans attendre de requête. C'est une solution idéale pour les chats, les notifications en temps réel, les jeux en ligne, les trackers et toutes les applications où une faible latence est importante.
Le PHP standard ne dispose pas de support intégré pour WebSocket, mais la bibliothèque Ratchet (utilisant le composant ReactPHP) comble cette lacune. Ratchet est une bibliothèque asynchrone qui permet d'exécuter un serveur WebSocket directement depuis PHP, en gérant plusieurs connexions simultanément sans blocage.
Fonctionnalités principales de Ratchet
- Asynchrone — basé sur ReactPHP, ne bloque pas le thread lors de l'attente de données.
- Support des protocoles — WebSocket (RFC 6455), ainsi que des composants HTTP (pour les applications hybrides).
- Simplicité — code minimal pour lancer un serveur.
- Mise à l'échelle — peut être combiné avec ZeroMQ ou Redis pour fonctionner en cluster.
- Compatibilité — fonctionne avec tous les navigateurs modernes via l'objet WebSocket intégré.
Installation de Ratchet
L'installation se fait via Composer. Ouvrez un terminal à la racine du projet et exécutez :
composer require cboden/ratchetAprès l'installation, toutes les dépendances, y compris ReactPHP, apparaîtront dans le dossier vendor.
Création d'un serveur WebSocket simple avec Ratchet
Créons un fichier server.php :
<?phprequire 'vendor/autoload.php';
use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
class Chat 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(); }}
$server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080);
echo "Serveur démarré sur le port 8080";$server->run();Explication du code
Chat— classe implémentantMessageComponentInterface. DansonOpen, nous sauvegardons la connexion ; dansonMessage, nous diffusons le message à tous sauf à l'expéditeur.IoServer::factory— crée un serveur basé sur ReactPHP. Nous encapsulons notre composant dansWsServer(pour WebSocket) etHttpServer(pour la compatibilité avec les requêtes HTTP).- Le serveur écoute sur le port 8080. Lancez-le avec la commande :
php server.php.
Partie cliente (JavaScript)
Créez un fichier HTML client.html :
<!DOCTYPE html><html><head> <title>Chat WebSocket</title> <script> const ws = new WebSocket('ws://localhost:8080');
Aussi dans la bibliothèque
Bibliothèques WebSocket Rust : Tokio-tungstenite et async-tungstenite pour le temps réel
Autorisation et authentification en Java : Spring Security et JWT
Travailler avec XML en Java : DOM, SAX, StAX et JAXB
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
Frameworks CLI pour PHP : Symfony Console et Laravel Zero — guide complet