+ 33 6 68 40 27 75 contact@odeven.fr

WebSockets ou Server-Sent Events (SSE) ? Le Guide Complet

par | Mar 29, 2024 | Architecture Logicielle

Dans le monde du développement web, choisir la bonne technologie pour la communication en temps réel entre le serveur et le client est crucial. Deux des technologies principales qui se disputent l’attention sont WebSockets et Server-Sent Events (SSE). Chacune a ses forces et ses faiblesses, et le choix dépend de vos besoins spécifiques en matière de projet. Dans cet article, nous explorerons en profondeur ces technologies, en mettant l’accent sur l’utilisation de WAMP (Web Application Messaging Protocol) et Crossbar.io pour WebSockets, et Mercure pour SSE, afin de vous aider à faire un choix éclairé.

WebSockets : Vue d’ensemble

WebSockets offre une connexion full-duplex sur une seule connexion TCP, permettant une communication bidirectionnelle entre le client et le serveur. Cette technologie est idéale pour des applications nécessitant des mises à jour en temps réel. Par exemple, les jeux en ligne, le chat en direct, ou les plateformes de trading.

Exemple d’utilisation

Les navigateurs internet couramment utilisés prennent en charge nativement l’objet WebSocket :

// Création d'une nouvelle connexion WebSocket à l'URL du serveur
const socket = new WebSocket('wss://votreServeurWebSocket');

// Écoute pour les messages arrivant du serveur
socket.onmessage = function(event) {
    console.log('Message reçu du serveur', event.data);
};

// Envoyer un message au serveur
socket.send('Bonjour serveur !');

// Écoute pour les fermetures de connexion
socket.onclose = function(event) {
    console.log('Connexion fermée', event.reason);
};

// Gestion des erreurs
socket.onerror = function(error) {
    console.error('Erreur WebSocket', error);
};

WAMP (Web Application Messaging Protocol)

Web Application Messaging Protocol

Le protocole WAMP est une couche de messagerie qui simplifie la communication en temps réel sur le Web. Il prend en charge deux modèles de communication: la requête-réponse et la publication-souscription. Ce protocole est conçu pour être utilisé avec WebSockets, offrant ainsi une solution performante et flexible pour les applications web.

Crossbar.io

Crossbar.io

Crossbar.io est un broker de messages qui implémente le protocole WAMP. Celui-ci facilite la mise en œuvre de communications en temps réel dans les applications web. Il gère de manière efficace les connexions WebSockets, en offrant des fonctionnalités comme l’authentification, l’autorisation, et le routage des messages.

Exemple d’utilisation

Pour utiliser WAMP dans votre application, vous aurez besoin d’une bibliothèque client comme autobahn-js. Voici un exemple de base de son utilisation :

var connection = new autobahn.Connection({
   url: 'wss://votreServeurCrossbar.io',
   realm: 'votreDomaine'
});

connection.onopen = function (session) {
    // Souscription à un topic
    session.subscribe('com.monapp.topic', function (args) {
        console.log('Message reçu :', args[0]);
    });

    // Publication sur un topic
    session.publish('com.monapp.topic', ['Hello, world!']);

    // Appel d'une procédure RPC
    session.call('com.monapp.maFonction', [2, 3]).then(
       function (result) {
           console.log('RPC résultat:', result);
       },
    );
};

connection.open();

Server-Sent Events (SSE) : Vue d’ensemble

Server-Sent Events est une technologie permettant au serveur d’envoyer des mises à jour au navigateur via une connexion HTTP standard. Contrairement à WebSockets, SSE est conçu pour des communications unidirectionnelles (serveur vers client). Cet aspect le rend parfait pour des cas d’utilisation comme les notifications ou mise à jour de données temps réel .

L’exemple le plus fréquent rendant l’utilisation de SSE pertinente est une page web affichant des données, lesquelles doivent être mise-à-jour sur l’écran de l’utilisateur dès lors qu’une action a lieu sur le Backend de l’application.

Mercure

Mercure

Mercure est une solution open source qui implémente SSE pour fournir des mises à jour en temps réel aux applications web. Il est conçu pour être simple à utiliser et à déployer, avec une compatibilité intégrée pour HTTP/2. Mercure se distingue par sa capacité à fonctionner avec des applications existantes et à fournir des mises à jour en temps réel sans nécessiter de modifications majeures de l’architecture existante.

Exemple d’utilisation

Pour utiliser SSE dans votre application web, vous pouvez simplement utiliser l’API EventSource intégrée aux navigateurs. Voici comment s’abonner à des mises à jour via Mercure :

const url = new URL('https://votreServeurMercure/.well-known/mercure');
url.searchParams.append('topic', 'http://monsite.com/monTopic');

const eventSource = new EventSource(url);

eventSource.onmessage = function(event) {
    // Traiter les données reçues du serveur
    console.log('Données reçues:', JSON.parse(event.data));
};

// Gestion des erreurs
eventSource.onerror = function(error) {
    console.error('Erreur SSE', error);
};

Comparaison: WebSockets vs SSE

CritèreWebSocketsSSE
ConnexionBidirectionnelleUnidirectionnelle
ComplexitéPlus complexe à mettre en œuvrePlus simple à utiliser
Support des navigateursLarge supportSupport presque universel
Utilisation des ressourcesPlus gourmand en ressourcesPlus léger
Cas d’utilisationJeux, chats en direct, trading, …Notifications, mises à jour de données, …
Comparaison entre WebSocket et SSE

Conclusion

Le choix entre WebSockets et SSE dépend largement de vos besoins spécifiques. Si vous avez besoin d’une communication bidirectionnelle complexe avec des fonctionnalités avancées, WebSockets avec WAMP et Crossbar.io pourrait être la solution idéale. D’un autre côté, si votre application nécessite des mises à jour du serveur vers le client de manière efficace et avec une mise en œuvre simple, SSE avec Mercure est probablement le meilleur choix.

Dans tous les cas, l’objectif est de fournir une expérience utilisateur fluide et réactive, en utilisant la technologie la plus adaptée à votre projet. En comprenant les forces et les faiblesses de chaque option, vous pouvez prendre une décision éclairée qui bénéficiera à la fois à votre application et à ses utilisateurs.