Maison  >  Article  >  interface Web  >  Comment fonctionnent les événements envoyés par le serveur (SSE)

Comment fonctionnent les événements envoyés par le serveur (SSE)

Barbara Streisand
Barbara Streisandoriginal
2024-09-28 06:17:29465parcourir

How Server-Sent Events (SSE) Work

SSE (Peristiwa Dihantar Pelayan) tidak digunakan secara meluas dalam dunia pembangunan web, artikel ini akan menyelam lebih mendalam tentang apa itu SSE, cara ia berfungsi dan cara ia boleh mendapat manfaat permohonan anda.


Apakah SSE?

SSE ialah cara yang mudah dan cekap untuk menghantar kemas kini masa nyata daripada pelayan kepada pelanggan melalui sambungan HTTP. Ia adalah sebahagian daripada spesifikasi HTML5 dan disokong oleh semua pelayar web moden. SSE adalah berdasarkan aliran data satu arah, di mana pelayan menghantar mesej kepada klien, tetapi klien tidak boleh menghantar mesej kembali ke pelayan.

SSE menggunakan format berasaskan teks yang dikenali sebagai "Peristiwa Dihantar Pelayan" untuk menghantar data kepada pelanggan. Data dihantar sebagai satu siri acara, setiap satunya mengandungi mesej dan jenis acara pilihan. Jenis acara digunakan untuk membezakan antara jenis mesej yang berbeza dan membolehkan pelanggan mengendalikannya secara berbeza.

Bagaimanakah SSE berfungsi?

Protokol SSE berfungsi dengan mewujudkan sambungan HTTP yang berterusan antara pelayan dan klien. Sambungan ini terus dibuka selagi pelanggan mahu menerima kemas kini daripada pelayan. Apabila pelayan mempunyai data baharu untuk dihantar, ia menghantar respons HTTP dengan jenis MIME khas “text/event-stream”.

Respons mengandungi satu siri peristiwa, setiap satu daripadanya dipisahkan oleh aksara baris baharu (“n”). Setiap acara mempunyai format berikut:

event: [event type]\n
data: [message]\n\n

Medan "acara" adalah pilihan dan digunakan untuk memberikan nama untuk acara tersebut. Medan "data" mengandungi mesej sebenar yang dihantar. Dua aksara baris baharu pada penghujung setiap acara digunakan untuk menandakan berakhirnya acara.

Berikut ialah contoh respons SSE yang mudah:

HTTP/1.1 200 OK
Content-Type: text/event-stream

event: message
data: Hello, world!

event: message
data: This is a test message.

event: customEvent
data: {"foo": "bar", "baz": 123}

Dalam contoh ini, kami menghantar tiga acara kepada pelanggan. Dua acara pertama mempunyai jenis acara "mesej" dan mengandungi mesej teks mudah. Acara ketiga mempunyai jenis acara "customEvent" dan mengandungi objek JSON sebagai mesejnya.

Apabila pelanggan menerima respons SSE, ia menggunakan data untuk mengemas kini antara muka penggunanya. Ini boleh dilakukan menggunakan JavaScript untuk memanipulasi DOM, contohnya.

Melaksanakan SSE

Melaksanakan SSE dalam aplikasi anda agak mudah. Berikut ialah contoh cara melaksanakan SSE menggunakan Node.js dan rangka kerja Express:

const express = require('express');
const app = express();

// Set up SSE endpoint
app.get('/events', (req, res) => {
  // Set headers
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');
  // Send initial event
  res.write('data: Connected\n\n');
  // Set interval to send periodic events
  const intervalId = setInterval(() => {
    res.write('data: Hello, world!\n\n');
  }, 1000);
  // Clean up on connection close
  req.on('close', () => {
    clearInterval(intervalId);
  });
});

// Start server
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

Dalam contoh ini, kami menyediakan titik akhir SSE di "/events". Kami menetapkan pengepala yang diperlukan untuk SSE dan menghantar acara awal kepada pelanggan untuk mengesahkan bahawa sambungan telah diwujudkan.

Kami kemudian menyediakan selang waktu untuk menghantar acara berkala kepada pelanggan setiap saat. Akhir sekali, kami sedang membersihkan selang apabila sambungan ditutup oleh pelanggan.

Di pihak pelanggan, kami boleh menggunakan kod JavaScript berikut untuk mendengar acara SSE:

const source = new EventSource('/events');

source.addEventListener('message', (event) => {
  console.log(event.data);
});
source.addEventListener('error', (event) => {
  console.error('Error:', event);
});

Dalam contoh ini, kami sedang mencipta objek EventSource baharu dan menghantar URL titik akhir SSE kami. Kami kemudian mendengar acara "mesej" dan log data ke konsol. Kami juga sedang mendengar acara "ralat" sekiranya terdapat sebarang isu sambungan.

Perhatikan bahawa laluan EventSource di bahagian hadapan hanya boleh digunakan oleh permintaan GET, jika anda ingin menggunakan POST dan kaedah HTTP lain, anda perlu menghuraikan sendiri data respons.

Jika anda mahukan pelaksanaan Node.js asli, inilah satu

Gunakan kes untuk SSE

SSE boleh digunakan dalam pelbagai aplikasi yang memerlukan kemas kini masa nyata. Berikut ialah beberapa contoh:

  • Platform media sosial: SSE boleh digunakan untuk menyediakan kemas kini masa nyata untuk platform media sosial, seperti pemberitahuan mesej baharu, ulasan atau suka.

  • Aplikasi kewangan: SSE boleh digunakan untuk menyediakan kemas kini masa nyata untuk aplikasi kewangan, seperti harga saham, kadar pertukaran mata wang atau berita.

  • Perjudian dalam talian: SSE boleh digunakan untuk menyediakan kemas kini masa nyata untuk aplikasi permainan dalam talian, seperti pemberitahuan acara permainan, markah atau kedudukan.

Faedah menggunakan SSE

Terdapat beberapa faedah menggunakan SSE berbanding kaedah komunikasi masa nyata lain seperti pengundian atau WebSockets:

Kecekapan

SSE menggunakan sambungan HTTP yang berterusan, yang bermaksud bahawa overhed untuk mewujudkan dan mengekalkan sambungan adalah jauh lebih rendah daripada kaedah lain. Ini menjadikan SSE lebih cekap dan kurang intensif sumber, yang amat penting apabila berurusan dengan sejumlah besar pelanggan.

Simplicité

SSE est un protocole simple, facile à comprendre et à mettre en œuvre. Il ne nécessite aucune bibliothèque ou framework spécial et peut être implémenté à l'aide de technologies Web standard telles que JavaScript et HTTP.

Fiabilité

SSE est un protocole fiable qui permet une reconnexion automatique en cas d'interruption du réseau. Cela garantit que le client continuera à recevoir des mises à jour même si la connexion est temporairement perdue.

Conclusion

Les événements envoyés par le serveur (SSE) sont un moyen simple et efficace d'envoyer des mises à jour en temps réel d'un serveur à un client via une connexion HTTP. Il fait partie de la spécification HTML5 et est pris en charge par tous les navigateurs Web modernes. SSE utilise un flux de données unidirectionnel, dans lequel le serveur envoie des messages au client, mais le client ne peut pas renvoyer de messages au serveur. Cela vous évite d'interroger constamment le serveur pour les événements, ce qui améliore non seulement les performances mais réduit également la complexité.

Si vous avez trouvé cela utile, pensez à à vous abonner à ma newsletter pour des articles et des outils plus utiles sur le développement Web. Merci d'avoir lu !

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!

Déclaration:
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