Bibliothèque WebSocket Ratchet pour PHP : création d'applications en temps réel
WebSocket est un protocole qui assure une communication bidirectionnelle entre le client et le serveur via une seule connexion permanente. Contrairement au HTTP traditionnel, où chaque requête ouvre une nouvelle connexion, WebSocket permet de transmettre des données en temps réel sans latence. Pour PHP, l'une des bibliothèques les plus populaires pour travailler avec WebSocket est Ratchet. Cette bibliothèque est construite sur ReactPHP et fournit une API simple et puissante pour créer des serveurs WebSocket.
Qu'est-ce que Ratchet ?
Ratchet est une bibliothèque PHP open source qui permet aux développeurs de créer des applications en temps réel, telles que des chats, des notifications, des jeux en ligne et des systèmes de surveillance. Elle abstrait la complexité du travail avec les sockets et les entrées-sorties asynchrones, en fournissant des classes et des interfaces pratiques.
Principales fonctionnalités de Ratchet :
- Prise en charge de WebSocket selon la spécification RFC 6455
- Intégration avec les serveurs HTTP (par exemple via ReactPHP)
- Possibilité de créer ses propres gestionnaires de messages
- Prise en charge de WAMP (WebSocket Application Messaging Protocol) pour Pub/Sub
- Légèreté et hautes performances
Installation de Ratchet
L'installation de la bibliothèque se fait via Composer. Exécutez dans le terminal :
composer require cboden/ratchetAprès l'installation, un dossier vendor apparaîtra dans votre projet avec les dépendances nécessaires, y compris ReactPHP.
Création d'un serveur WebSocket simple
Considérons un exemple de base : créons un serveur qui accepte les connexions et renvoie un message de bienvenue. Pour cela, créez 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 MyWebSocket 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}"; $conn->send("Bienvenue ! Votre ID : {$conn->resourceId}"); }
public function onMessage(ConnectionInterface $from, $msg) { echo "Message reçu de {$from->resourceId} : {$msg}"; // Envoyer à tous les clients foreach ($this->clients as $client) { if ($from !== $client) { $client->send("Message de {$from->resourceId} : {$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(); }}
$server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080);
echo "Serveur WebSocket démarré sur le port 8080...";$server->run();Lancez le serveur avec la commande :
php server.phpLe serveur écoute maintenant sur le port 8080. Pour tester, vous pouvez utiliser n'importe quel client WebSocket, par exemple une extension de navigateur ou un simple code JavaScript.
Partie cliente en JavaScript
Créez un fichier HTML client.html :
<!DOCTYPE html><html><head> <title>Client WebSocket</title></head><body> <input type="text" id="message" placeholder="En Aussi dans la bibliothèque
MongoDB.Driver C# (.NET) : guide complet avec exemples
Géolocalisation et cartes en PHP : aperçu des bibliothèques et outils
Ktor Client — Client HTTP pour Kotlin
Travailler avec CSV en JavaScript (Node.js) : bibliothèques et outils