Sepuluh tahun yang lalu, jika anda perlu membangunkan aplikasi masa nyata (seperti sembang atau suapan kemas kini), pelan pilihan adalah mengundi. Teknologi ini menghantar data kemas kini ke pelayan mengikut masa dan berulang kali menghantar permintaan HTTP. Walau bagaimanapun, walaupun tidak ada maklumat baru, permintaan itu masih akan dihantar, menyebabkan pembaziran jalur lebar dan keupayaan pemprosesan pelayan.
Untungnya, Times berubah. Sekarang menggunakan JavaScript, kita boleh menggunakan Perpustakaan Eventsource untuk menubuhkan sambungan SSE (Server Sending Event). Artikel ini akan membincangkan konsep SSE dan memberikan tutorial ringkas.
Sambungan langsung
Selepas sambungan ditubuhkan, data mencapai klien JavaScript dalam bentuk acara. Pelayan bertanggungjawab untuk menghantar acara yang mengandungi data terkini apabila perlu.
Kecuali sambungan ditutup, pelanggan akan terus menunggu acara data baru yang dihantar oleh pelayan, yang menjadikannya teknologi yang ideal yang membina notis yang perlu dikemas kini secara berterusan, panel instrumen atau sembang.
Sambungkan sistem pengurusanUntuk mengamalkan konsep di atas, kami akan membuat aplikasi Node.js (Back -end) untuk menyediakan titik akhir sambungan SSE untuk klien JavaScript (hujung depan).
mari kita mulakan!Buat fail index.js, tumpukan logik belakang. Di samping itu, buat folder A/awam untuk menyimpan fail index.html dan skrip.js untuk menguruskan halaman. Strukturnya adalah seperti berikut: <:>
di index.js, import perpustakaan ekspres (digunakan untuk membuat titik akhir HTTP):
<code class="language-bash">npm init -y npm i express</code>
di /public/index.html, buat HTML asas untuk memaparkan tajuk dan menguji sama ada pelayan berjalan:
<code>/public index.html script.js index.js package.json</code>
Sekarang, berjalan NPM bermula di terminal, halaman harus dipaparkan dalam penyemak imbas:
<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>
<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>
Di dalamnya, eksport kelas sambungan, simpan pemetaan pengguna yang telah disambungkan kepada pengguna (pengguna baru yang berdaftar) dan kaedah penyingkiran (keluarkan pengguna dari pemetaan):
<code class="language-bash">npm init -y npm i express</code>
Oleh kerana kelas sambungan mengasingkan logik pengurusan sambungan, kita perlu mengkonfigurasi titik akhir dalam pelayan (index.js) supaya pelanggan dapat memulakan komunikasi SSE.
<code>/public index.html script.js index.js package.json</code>
Content-Type: text/event-stream
req.on("close", () => {})
Oleh kerana pelayan telah menyediakan titik akhir sambungan SSE, pelanggan perlu meminta alamat ini dan menunggu acara penghantaran.
Dalam fail index.html, kami akan membuat:
medan teks untuk pengguna memasuki userId; <ul> dua butang: satu untuk permulaan, yang lain digunakan untuk mematikan sambungan SSE;
<ul>
<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>
<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>
Ini melengkapkan sistem sambungan SSE Real -Time yang mudah. Teknologi ini sangat sesuai untuk pelayan untuk terus menghantar satu data kepada pelanggan, seperti suapan, sembang atau panel instrumen.
Sila ambil perhatian bahawa untuk integriti, saya menambah pemprosesan ralat dan beberapa butiran kod, seperti menambah
cek dalam fungsidan menambah prosedur pemprosesan acara ke fungsi
. Penambahbaikan ini meningkatkan keteguhan dan kebolehpercayaan kod.Atas ialah kandungan terperinci Membuat Aplikasi Masa Nyata dengan SSE (Acara Server-Sent). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!