Introduction aux WebSockets

Comprendre le fonctionnement des WebSockets et leur utilisation dans les applications web.

🔙

Historique des WebSockets

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.

Introduction

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.

Fonctionnement des WebSockets


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 :

Communication bidirectionnelle : Fermeture de la connexion :

Avantages et inconvénients de WebSocket

Avantages :

Inconvénients :

Comparaison WebSocket vs 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

Mise en pratique

Créer un serveur WebSocket avec Python

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()

Créer un client WebSocket avec JavaScript

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");
};

Tester la connexion

Exécutez le serveur Python, puis ouvrez le fichier client dans un navigateur pour voir les messages échangés.