L'API Events (SSE) du HTML5 Server-Sent (SSE) fournit un moyen simple et efficace pour un serveur Web de pousser les mises à jour du navigateur d'un client en temps réel. Contrairement aux technologies comme WebSockets, SSE est unidirectionnelle - le serveur envoie des données au client, mais le client ne peut pas renvoyer des données au serveur sur la même connexion. Cette simplicité le rend idéal pour les scénarios où le serveur doit pousser les mises à jour du client, telles que les tickers de stock, les scores en direct ou les applications de chat (où le client n'a besoin que de messages).
Pour utiliser SSE, vous devez créer un objet EventSource
dans votre code JavaScript. Cet objet établit une connexion persistante à un point de terminaison côté serveur qui diffuse des événements. Voici un exemple de base:
<code class="javascript">const eventSource = new EventSource('/events'); eventSource.onmessage = function(event) { console.log('Received event:', event.data); // Process the received data here, eg, update the UI }; eventSource.onerror = function(error) { console.error('EventSource failed:', error); };</code>
Ce code crée un EventSource
connecté aux /events
. Le gestionnaire d'événements onmessage
reçoit les données envoyées par le serveur et le gestionnaire onerror
capte toutes les erreurs. Le serveur, AT /events
, doit être configuré pour envoyer des données dans le format SSE correct (plus à ce sujet dans la section côté serveur ci-dessous). N'oubliez pas de gérer les erreurs potentielles et d'implémenter la logique de reconnexion (comme détaillé dans une section ultérieure). Le serveur enverra en continu des données sur cette connexion jusqu'à ce que la connexion soit fermée soit par le client ou le serveur.
SSE offre plusieurs avantages par rapport aux autres technologies de communication en temps réel comme WebSockets:
Cependant, WebSockets est supérieur lorsque la communication bidirectionnelle est requise. La nature unidirectionnelle de SSE limite son applicabilité dans les scénarios où les clients doivent renvoyer activement des données au serveur.
Bien que SSE dispose d'un mécanisme de réessayer intégré, des applications robustes devraient implémenter la gestion des erreurs personnalisées et la logique de reconnexion pour une expérience plus contrôlée et réactive. Voici un exemple amélioré:
<code class="javascript">const eventSource = new EventSource('/events'); let reconnectAttempts = 0; const maxReconnectAttempts = 5; eventSource.onmessage = function(event) { console.log('Received event:', event.data); reconnectAttempts = 0; // Reset on successful message }; eventSource.onerror = function(error) { console.error('EventSource failed:', error); if (reconnectAttempts { eventSource.close(); eventSource = new EventSource('/events'); // Reconnect reconnectAttempts ; }, retryDelay); } else { console.error('Max reconnect attempts reached. Giving up.'); // Handle the failure appropriately, eg, display an error message to the user } };</code>
Cet exemple amélioré ajoute:
L'implémentation côté serveur de SSE dépend de la technologie utilisée (par exemple, Node.js, Python, Java). Cependant, le principe de base reste le même: le serveur doit envoyer des données dans le format SSE correct. Ce format nécessite un en-tête HTTP spécifique ( Content-Type: text/event-stream
) et formaté des données avec des délimiteurs spécifiques. Voici un exemple de base en utilisant Node.js avec Express:
<code class="javascript">const express = require('express'); const app = express(); const port = 3000; app.get('/events', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); // Simulate sending events every second setInterval(() => { const data = `data: ${new Date().toISOString()}\n\n`; res.write(data); }, 1000); req.on('close', () => { console.log('Client disconnected'); }); }); app.listen(port, () => { console.log(`Server listening on port ${port}`); });</code>
Ce code Node.js met en place un point de terminaison aux /events
. La fonction res.writeHead
définit les en-têtes HTTP nécessaires. La fonction setInterval
simule l'envoi de données chaque seconde. Surtout, chaque message de données est suivi de deux caractères Newline ( \n\n
) comme requis par la spécification SSE. Le gestionnaire d'événements req.on('close')
est important pour les déconnexions de journaux. N'oubliez pas d'adapter ce code à la technologie et à la source de données côté serveur choisi. Pour une mise à l'échelle efficace, envisagez d'utiliser des technologies conçues pour gérer de nombreuses connexions simultanées, telles que les équilibreurs de charge et les cadres asynchrones.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!