L'Architecture en Microservices : Approfondissement et Schémas
Pourquoi passer d'un monolithe à une structure en microservice ?
EventSource est un protocole méconnu et pourtant bien plus simple et adapté dans la plupart des cas.
Dans le développement d'applications web modernes, la communication en temps réel entre le client et le serveur est devenue une nécessité pour de nombreux cas d'utilisation. Deux des principales technologies permettant cette communication sont les WebSockets et EventSource (basé sur Server-Sent Events). Cet article compare ces deux technologies, en examinant leurs avantages, inconvénients et les scénarios où l'une peut être préférée à l'autre.
WebSocket est un protocole de communication bidirectionnel TCP qui permet une interaction en temps réel entre le client et le serveur. Contrairement au protocole HTTP standard, qui suit un modèle requête-réponse, WebSocket permet aux deux parties d'envoyer des messages à tout moment.
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
setInterval(() => {
ws.send(`Server time: ${new Date().toISOString()}`);
}, 1000);
});
console.log('WebSocket server listening on ws://localhost:8080');
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
console.log('WebSocket connection established');
socket.send('Hello Server!');
};
socket.onmessage = function(event) {
console.log('Message from server: ' + event.data);
};
socket.onclose = function(event) {
console.log('WebSocket connection closed');
};
EventSource utilise le protocole HTTP pour permettre une connexion unidirectionnelle, où le serveur peut envoyer des mises à jour en continu au client. Ceci est basé sur les Server-Sent Events (SSE).
const http = require('http');
http.createServer((req, res) => {
if (req.headers.accept && req.headers.accept === 'text/event-stream') {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.write(`data: Connection established\n\n`);
setInterval(() => {
res.write(`data: ${new Date().toISOString()}\n\n`);
}, 1000);
} else {
res.writeHead(404);
res.end();
}
}).listen(8080, () => {
console.log('Server listening on http://localhost:8080');
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EventSource Example</title>
</head>
<body>
<div id="date"></div>
<script>
const eventSource = new EventSource('http://localhost:8080');
eventSource.onmessage = function(event) {
document.getElementById('date').textContent = event.data;
};
</script>
</body>
</html>
Le choix entre WebSocket et EventSource dépend des besoins spécifiques de l'application. WebSocket excelle dans les applications nécessitant une communication bidirectionnelle complexe et en temps réel, tandis que EventSource offre une solution simple, efficace et facile à déployer pour les scénarios où des mises à jour unidirectionnelles sont suffisantes. En fonction des exigences de performance, de complexité et de compatibilité, les développeurs peuvent choisir la technologie qui leur convient le mieux. Mais dans la plupart des cas, EventSource suffira largement