Junior
Qu'est-ce que les WebSockets?
sobes.tech IA
Réponse de l'IA
Les Websockets sont un protocole de communication bidirectionnelle via une seule connexion TCP, permettant d’échanger des données en temps réel entre le navigateur et le serveur.
Principales différences avec les requêtes HTTP traditionnelles :
- Communication bidirectionnelle : Le serveur peut envoyer des données au client sans requête préalable.
- Une seule connexion : Une seule connexion longue durée est établie, éliminant les coûts d’établissement d’une nouvelle connexion pour chaque échange de données (comme en HTTP).
- Réduction de la latence : Moins de temps est consacré à établir la connexion, échanger les en-têtes et traiter les requêtes/réponses courtes.
Principe de fonctionnement :
- Handshake : Le navigateur envoie une requête HTTP spéciale au serveur (avec les en-têtes
Upgrade: websocketetConnection: Upgrade). - Établissement de la connexion : Si le serveur supporte les websockets, il répond avec le code
101 Switching Protocols, après quoi la connexion passe au protocole websocket. - Transmission de données : Après l’établissement, les deux parties peuvent échanger librement des messages à tout moment.
Exemples d’utilisation :
- Jeux en ligne
- Chats et messageries
- Mises à jour en temps réel (cotations, actualités)
- Outils collaboratifs
Avantages :
- Faible latence
- Utilisation efficace des ressources (moins d’overhead)
- Communication bidirectionnelle en temps réel
Inconvénients :
- Nécessite un support côté client (navigateur) et côté serveur.
- Implémentation plus complexe comparée aux requêtes HTTP simples.
Exemple de code client en JavaScript :
// création d’un websocket
const socket = new WebSocket('wss://example.com/websocket');
// gestionnaire d’ouverture de connexion
socket.onopen = function(event) {
console.log('Connexion établie');
socket.send('Bonjour, serveur!'); // envoi d’un message au serveur
};
// gestionnaire de réception de message
socket.onmessage = function(event) {
console.log('Message reçu du serveur : ' + event.data);
};
// gestionnaire de fermeture de connexion
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Connexion fermée proprement, code=${event.code} raison=${event.reason}`);
} else {
console.log('Connexion interrompue'); // par exemple, à cause d’un problème réseau
}
};
// gestionnaire d’erreur
socket.onerror = function(error) {
console.error(`Erreur websocket : ${error}`);
};
// fermeture de la connexion (si nécessaire)
// socket.close();