Rumah >hujung hadapan web >Tutorial H5 >Bagaimanakah saya menggunakan API HTML5 Server-Sent Events (SSE) untuk kemas kini masa nyata dari pelayan?

Bagaimanakah saya menggunakan API HTML5 Server-Sent Events (SSE) untuk kemas kini masa nyata dari pelayan?

Robert Michael Kim
Robert Michael Kimasal
2025-03-12 15:19:18154semak imbas

Cara Menggunakan API Peristiwa Server Html5 (SSE) untuk kemas kini masa nyata dari pelayan

API Server-Sent Events (SSE) HTML5 menyediakan cara yang mudah dan cekap untuk pelayan web untuk menolak kemas kini kepada penyemak imbas klien secara real-time. Tidak seperti teknologi seperti WebSockets, SSE adalah Unidirectional - pelayan menghantar data kepada klien, tetapi pelanggan tidak dapat menghantar data kembali ke pelayan melalui sambungan yang sama. Kesederhanaan ini menjadikannya sesuai untuk senario di mana pelayan perlu menolak kemas kini kepada pelanggan, seperti ticker saham, skor langsung, atau aplikasi sembang (di mana pelanggan hanya perlu menerima mesej).

Untuk menggunakan SSE, anda perlu membuat objek EventSource dalam kod JavaScript anda. Objek ini mewujudkan sambungan berterusan ke titik akhir pelayan yang mengalir peristiwa. Inilah contoh asas:

 <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>

Kod ini mewujudkan EventSource yang disambungkan ke /events . Pengendali acara onmessage menerima data yang dihantar oleh pelayan, dan pengendali onerror menangkap sebarang kesilapan. Pelayan, di /events , harus dikonfigurasi untuk menghantar data dalam format SSE yang betul (lebih lanjut mengenai ini di bahagian pelayan di bawah). Ingatlah untuk mengendalikan kesilapan yang berpotensi dan melaksanakan logik penyambungan semula (seperti yang terperinci dalam bahagian kemudian). Pelayan akan terus menghantar data ke atas sambungan ini sehingga sambungan ditutup sama ada oleh klien atau pelayan.

Manfaat Menggunakan Acara Server-Sent (SSE) berbanding dengan teknologi komunikasi masa nyata lain seperti WebSockets

SSE menawarkan beberapa kelebihan mengenai teknologi komunikasi masa nyata yang lain seperti WebSockets:

  • Kesederhanaan: SSE jauh lebih mudah untuk dilaksanakan pada kedua -dua sisi klien dan pelayan. API adalah mudah, dan protokol kurang kompleks daripada WebSockets. Ini mengurangkan masa pembangunan dan kerumitan.
  • Kecekapan: SSE lebih cekap untuk komunikasi unidirectional. Kerana ia hanya membolehkan komunikasi pelayan-ke-klien, ia mengelakkan overhead yang berkaitan dengan protokol komunikasi dua arah seperti WebSockets. Ini diterjemahkan kepada penggunaan jalur lebar yang lebih rendah dan mengurangkan beban pelayan, terutamanya apabila berurusan dengan banyak pelanggan.
  • Berasaskan HTTP: SSE memanfaatkan infrastruktur HTTP yang sedia ada, menjadikannya mudah untuk diintegrasikan dengan pelayan web dan infrastruktur yang sedia ada. Ini menghapuskan keperluan untuk persediaan atau protokol khusus.
  • Mekanisme Reg Retry: SSE termasuk mekanisme semula terbina dalam. Jika sambungan hilang, pelanggan secara automatik akan cuba menyambung semula ke pelayan selepas kelewatan yang ditentukan. Ini memudahkan pengendalian ralat dan memastikan keteguhan. (Walaupun anda masih boleh menyesuaikan tingkah laku ini).

Walau bagaimanapun, websocket lebih unggul apabila komunikasi dua arah diperlukan. Sifat unidirectional SSE mengehadkan kebolehgunaannya dalam senario di mana pelanggan perlu menghantar data kembali ke pelayan secara aktif.

Melaksanakan pengendalian ralat dan logik penyambungan semula dalam aplikasi klien SSE saya

Walaupun SSE mempunyai mekanisme semula terbina dalam, aplikasi yang mantap harus melaksanakan pengendalian ralat tersuai dan logik penyambungan semula untuk pengalaman yang lebih terkawal dan responsif. Inilah contoh yang dipertingkatkan:

 <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>

Contoh yang lebih baik ini menambah:

  • Sambung semula percubaan: Mengehadkan bilangan percubaan penyambungan semula untuk mencegah gelung tak terhingga.
  • Backoff eksponen: Meningkatkan kelewatan semula dengan eksponen dengan setiap percubaan, mengurangkan beban pelayan semasa isu sambungan.
  • Pengendalian Kegagalan: Menyediakan mekanisme untuk mengendalikan keadaan di mana bilangan maksimum percubaan menyambung semula dicapai.

Menstrukturkan kod pelayan saya untuk menghantar acara dengan berkesan menggunakan API Acara Server (SSE)

Pelaksanaan pelayan SSE bergantung kepada teknologi yang digunakan (misalnya, Node.js, Python, Java). Walau bagaimanapun, prinsip teras tetap sama: pelayan perlu menghantar data dalam format SSE yang betul. Format ini memerlukan header HTTP tertentu ( Content-Type: text/event-stream ) dan data yang diformat dengan pembatas tertentu. Berikut adalah contoh asas menggunakan node.js dengan ekspres:

 <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>

Kod Node.js ini menetapkan titik akhir pada /events . Fungsi res.writeHead menetapkan tajuk HTTP yang diperlukan. Fungsi setInterval mensimulasikan data setiap saat. Secara kritis, setiap mesej data diikuti oleh dua aksara baru ( \n\n ) seperti yang dikehendaki oleh spesifikasi SSE. Pengendali acara req.on('close') adalah penting untuk log pemotongan. Ingatlah untuk menyesuaikan kod ini ke teknologi dan sumber data pelayan yang dipilih. Untuk skala yang cekap, pertimbangkan untuk menggunakan teknologi yang direka untuk mengendalikan banyak sambungan serentak, seperti pengimbang beban dan rangka kerja asynchronous.

Atas ialah kandungan terperinci Bagaimanakah saya menggunakan API HTML5 Server-Sent Events (SSE) untuk kemas kini masa nyata dari pelayan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn