Comprendre le fonctionnement des WebSockets et leur utilisation dans les applications web.
Le protocole WebSocket a été introduit en 2008 et standardisé par l'IETF en 2011. Avant cela, les applications web reposaient principalement sur le protocole HTTP pour la communication, qui fonctionnait en mode requête-réponse. WebSocket est conçu pour permettre une communication en temps réel plus efficace.
WebSocket est un protocole de communication bidirectionnel, full-duplex, conçu pour fonctionner sur une connexion TCP, ce qui permet un échange de données en temps réel entre un client (souvent un navigateur) et un serveur. Contrairement au modèle traditionnel HTTP, où chaque requête du client nécessite une réponse du serveur (modèle de requête-réponse), WebSocket établit une connexion unique et persistante, permettant au client et au serveur de s’envoyer des messages à tout moment.
Le protocole WebSocket commence par une négociation via une requête HTTP standard, appelée handshake. Une fois la connexion établie, celle-ci reste ouverte, permettant un échange continu de messages entre le client et le serveur. Voici les principales étapes :
Handshake HTTP :
Aspect | WebSocket | HTTP |
---|---|---|
Connexion | Persistante | Fermée après chaque requête |
Latence | Faible, connexion unique | Haute, chaque requête nécessite un nouvel échange |
Mode de communication | Bidirectionnel, full-duplex | Requête-réponse, unidirectionnel |
Cas d’utilisation | Chat, jeux, notifications, flux de données | API REST, chargement de pages |
Exemple de code pour un serveur WebSocket avec la bibliothèque websockets
en Python.
import asyncio
import websockets
async def serveur(websocket, path):
async for message in websocket:
await websocket.send(f"Message reçu: {message}")
start_server = websockets.serve(serveur, "localhost", 12345)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Code d'exemple pour un client WebSocket en JavaScript.
// Connexion WebSocket
const socket = new WebSocket("ws://localhost:12345");
socket.onopen = () => {
socket.send("Bonjour serveur");
};
socket.onmessage = (event) => {
console.log("Message reçu: ", event.data);
};
socket.onclose = () => {
console.log("Connexion fermée");
};
Exécutez le serveur Python, puis ouvrez le fichier client dans un navigateur pour voir les messages échangés.