Maison > interface Web > js tutoriel > Création d'applications en temps réel avec SSE (événements de serveur)

Création d'applications en temps réel avec SSE (événements de serveur)

DDD
Libérer: 2025-01-28 08:31:12
original
176 Les gens l'ont consulté

Il y a dix ans, si vous avez besoin de développer une application réelle (telle que Chat ou Update Feed), le plan préféré est le sondage. Cette technologie envoie les données de mise à jour au serveur à l'heure et envoie à plusieurs reprises les demandes HTTP. Cependant, même s'il n'y a pas de nouvelles informations, la demande sera toujours envoyée, provoquant un gaspillage de la bande passante et des capacités de traitement du serveur.

Criando aplicações em tempo real com SSE (Server-Sent Events)

Heureusement, le temps change. Maintenant, en utilisant JavaScript, nous pouvons utiliser la bibliothèque Eventsource pour établir une connexion SSE (Server Envoid Event). Cet article discutera du concept de SSE et fournira un bref tutoriel.

Connexion en direct

Différent de la demande HTTP traditionnelle (client a publié une demande, le serveur renvoie la réponse), la connexion SSE reste ouverte pour réaliser la communication à une voie du serveur au client. Contrairement au WebSocket qui permet une communication à deux voies, SSE envoie uniquement des données au client et le client reçoit du temps réel pendant la connexion.

Criando aplicações em tempo real com SSE (Server-Sent Events) Une fois la connexion établie, les données atteignent le client JavaScript sous la forme d'un événement. Le serveur est responsable de l'envoi d'événements contenant des données mises à jour si nécessaire.

à moins que la connexion ne soit close, le client continuera d'attendre le nouvel événement de données envoyé par le serveur, ce qui en fait une technologie idéale qui construit un avis qui doit être mis à jour en continu, un tableau de bord ou un chat. Criando aplicações em tempo real com SSE (Server-Sent Events)

Connectez le système de gestion

Afin de pratiquer le concept ci-dessus, nous créerons une application Node.js (back -end) pour fournir le point de terminaison de la connexion SSE pour JavaScript Client (frontal).

L'application

est un système qui doit entrer dans l'utilisateur et établir une connexion SSE. Après cela, le serveur envoie un événement toutes les 5 secondes et renvoie une liste des listes d'utilisateurs. Si l'utilisateur compense la connexion, il sera automatiquement supprimé de la liste d'utilisateurs connectés.

Commençons!

Créez le fichier index.js, concentrez-vous la logique arrière. De plus, créez un dossier A / public pour stocker les fichiers index.html et script.js pour gérer les pages. La structure est la suivante:

dans index.js, importez la bibliothèque express (utilisée pour créer des points de terminaison http):
<code class="language-bash">npm init -y
npm i express</code>
Copier après la connexion
Copier après la connexion

dans /public/index.html, créez un HTML de base pour afficher le titre et tester si le serveur s'exécute:
<code>/public
  index.html
  script.js
index.js
package.json</code>
Copier après la connexion
Copier après la connexion

Maintenant, l'exécution de NPM commence dans le terminal, la page doit être affichée dans le navigateur:
<code class="language-javascript">import express from "express"
import fs from "fs"
import path from "path"

const app = express()
app.use(express.json())
app.use(express.static(path.join(path.resolve(path.dirname("")), "public")))

app.get("/", (_, res) => {
  res.writeHead(200, { "content-language": "text/html" })
  const streamIndexHtml = fs.createReadStream("index.html")
  streamIndexHtml.pipe(res)
})

const PORT = 3000
app.listen(PORT, () => console.log(`Server is running on ${PORT} port`))</code>
Copier après la connexion
Copier après la connexion

<code class="language-html"><!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Server Sent Events Demo</title>
  <h1>Server Sent Events Demo (SSE)</h1>
</head>
<body>
</body>
</html></code>
Copier après la connexion
Copier après la connexion
Retour à l'arrière, créez un fichier Connection.js pour gérer la connexion entre l'utilisateur et le serveur:

dans l'informatique, exportez la classe de connexion, stockez le mappage de l'utilisateur qui a été connecté à l'utilisateur (nouveaux utilisateurs enregistrés) et la méthode de suppression (supprimez l'utilisateur de la mappage): Criando aplicações em tempo real com SSE (Server-Sent Events)

<code class="language-bash">npm init -y
npm i express</code>
Copier après la connexion
Copier après la connexion

Étant donné que la classe de connexion a isolé la logique de gestion de la connexion, nous devons configurer un point de terminaison dans le serveur (index.js) afin que le client puisse démarrer la communication SSE.

<code>/public
  index.html
  script.js
index.js
package.json</code>
Copier après la connexion
Copier après la connexion
Voici trois points:

Les points de terminaison
    / événements doivent répondre au client avec
  1. tête. Cela permet aux clients d'identifier la communication SSE et de créer des objets Eventsource pour établir des connexions. Content-Type: text/event-stream
  2. Le serveur envoie une réponse d'événement au client connecté toutes les cinq secondes pour informer quels utilisateurs ont établi une connexion.
  3. Utilisation de la connexion d'arrêt de surveillance de la surveillance des événements permet aux utilisateurs déconnectés de supprimer de la mappage de connexion.
  4. req.on("close", () => {})
  5. Le back-end a été achevé! Vous pouvez maintenant faire attention à l'avant.

Étant donné que le serveur a fourni le point de terminaison de la connexion SSE, le client doit demander cette adresse et attendre l'événement d'envoi.

Dans le fichier index.html, nous créerons:

un champ de texte pour que les utilisateurs entrent en service utilisateur; <ul> Deux boutons: l'un pour le démarrage, l'autre est utilisé pour éteindre la connexion SSE;
  • A Étiquette, affichant la liste d'utilisateurs à laquelle a été connecté, cette liste mettra à jour les événements envoyés par le serveur.
  • puis ajoutez du code js au script.js: <ul>
  • Ouvrez les deux pages d'onglet dans le navigateur pour tester la connexion réelle-temps pour observer la mise à jour de l'utilisateur.
    <code class="language-javascript">import express from "express"
    import fs from "fs"
    import path from "path"
    
    const app = express()
    app.use(express.json())
    app.use(express.static(path.join(path.resolve(path.dirname("")), "public")))
    
    app.get("/", (_, res) => {
      res.writeHead(200, { "content-language": "text/html" })
      const streamIndexHtml = fs.createReadStream("index.html")
      streamIndexHtml.pipe(res)
    })
    
    const PORT = 3000
    app.listen(PORT, () => console.log(`Server is running on ${PORT} port`))</code>
    Copier après la connexion
    Copier après la connexion

    <code class="language-html"><!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Server Sent Events Demo</title>
      <h1>Server Sent Events Demo (SSE)</h1>
    </head>
    <body>
    </body>
    </html></code>
    Copier après la connexion
    Copier après la connexion

    Ceci complète un système de connexion SSE réel SSE. Cette technologie est très adaptée au serveur pour continuer à envoyer des données d'une voie au client, telles que le flux, le chat ou le tableau de bord.

    Criando aplicações em tempo real com SSE (Server-Sent Events) Veuillez noter que pour l'intégrité, j'ai ajouté un traitement d'erreur et certains détails de code, tels que l'ajout de

    vérifie la fonction

    et l'ajout de procédures de traitement d'événements Criando aplicações em tempo real com SSE (Server-Sent Events) à la fonction

    . Ces améliorations améliorent la robustesse et la fiabilité du code.

    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!

    source:php.cn
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal