SSE ievads
SSE apzīmē servera nosūtītos notikumus, kas burtiski nozīmē, ka serveris nosūta informāciju klientam. SSE ir vienvirziena kanāls,Serveris var nosūtīt informāciju tikai klientamKlients var saņemt SSE pieprasījumu tikai pēc pirmās aktivizēšanas reizes un nevar atbildēt.
SSE galvenās iezīmes ietver:
- Lietošanas ērtums: SSE izmanto teksta datu formātus, piemēram, vienkāršu tekstu, JSON utt., padarot salīdzinoši vienkāršu datu nosūtīšanu un parsēšanu.
- Vienvirziena saziņa: SSE atbalsta vienvirziena saziņu starp serveri un klientu, kur serveris var aktīvi virzīt datus klientam, bet klients var saņemt tikai datus.
- Reāllaiks: SSE izveido ilgtermiņa savienojumus, ļaujot serveriem nosūtīt datus klientiem reāllaikā bez biežiem pieprasījumiem.
SSE salīdzinājumā ar WebSocket
WebSocket ir vēl viena tīmekļa tehnoloģija, ko izmanto, lai iespējotu reāllaika divvirzienu saziņu, kas savā ziņā atšķiras no SSE. Šeit ir salīdzinājums starp SSE un WebSocket:
- Datu virzīšanas virziens: SSE ir vienvirziena saziņa starp serveri un klientu, un serveris var aktīvi virzīt datus klientam. WebSocket, no otras puses, ir divvirzienu komunikācija, kas ļauj reāllaikā divvirzienu datu apmaiņu starp serveri un klientu.
- Savienojuma izveide: SSE izmanto garus HTTP savienojumus, lai izveidotu savienojumus, izmantojot parastos HTTP pieprasījumus un atbildes, tādējādi reāllaika datu virzīšanu. WebSockets izmanto pielāgotus protokolus, lai iespējotu divvirzienu sakarus, izveidojot WebSocket savienojumus.
- Saderība: Tā kā SSE ir balstīts uz HTTP protokolu, to var izmantot lielākajā daļā mūsdienu pārlūkprogrammu un tam nav nepieciešami papildu protokola jauninājumi. WebSockets tiek atbalstīti arī lielākajā daļā mūsdienu pārlūkprogrammu, taču dažās īpašās tīkla vidēs tās var būt problemātiskas.
- Piemērojamie scenāriji: SSE ir piemērots scenārijiem, kad serveris reāllaikā nosūta datus klientam, piemēram, akciju cenu atjauninājumi, ziņu reāllaika virzīšana utt. WebSocket ir piemērots scenārijiem, kuros nepieciešama reāllaika divvirzienu saziņa, piemēram, tērzēšanas lietojumprogrammas un vairāku personu sadarbības rediģēšana.
- Atkarībā no jūsu konkrētajām biznesa vajadzībām un scenārijiem, SSE vai WebSocket izvēle ir atkarīga no jūsu faktiskajām vajadzībām. Ja jums ir nepieciešams tikai serveris, lai virzītu datus klientiem vienā virzienā, un vēlaties, lai tie būtu vienkārši un saderīgi, SSE ir laba izvēle. Ja jums ir nepieciešams panākt divvirzienu saziņu vai ja jums ir nepieciešamas uzlabotas funkcijas un vadība, tad WebSocket var būt labāk piemērots jūsu vajadzībām.
SSE notikumu straumes formāts
Notikumu straume ir vienkārša teksta datu plūsma, kas jākodē UTF-8 formātā. Notikumu straumeZiņojumu atdala rindiņu pārtraukumu pāris。 Uzvedības komentāru rindiņas, kas sākas ar kolu, tiek ignorētas. Katrs lauks tiek attēlots ar lauka nosaukumu, kam seko kols un pēc tam teksta dati par šī lauka vērtību.
Lauki ir šādi:
notikums: virkne, ko izmanto, lai identificētu notikuma tipu. Ja šī virkne ir norādīta, pārlūkprogramma nosūta notikumu ar norādīto notikuma nosaukumu atbilstošajam klausītājam; Klientam jāizmanto addEventListener(), lai klausītos norādīto notikumu. Ja ziņojumā nav norādīts notikuma nosaukums, var izsaukt onmessage apdarinātāju.
dati: ziņojuma datu lauks. Kad EventSource saņem vairākas secīgas rindiņas, kas sākas ar data:, tas tās savieno, ievietojot rindiņas pārtraukumu starp tām. Rindiņas pārtraukums beigās tiek noņemts.
Id: notikuma ID, kas kļūst par pašreizējā EventSource objekta iekšējā rekvizīta "Pēdējā notikuma ID" īpašuma vērtību.
Mēģināt vēlreiz: laiks atjaunot savienojumu. Ja savienojums ar serveri tiek zaudēts, pārlūkprogramma gaidīs norādīto laiku un pēc tam mēģinās atkārtoti izveidot savienojumu. Tam jābūt veselam skaitlim, kas norāda atkārtota savienojuma izveides laiku milisekundēs. Ja ir norādīta vērtība, kas nav vesels skaitlis, lauks tiek ignorēts.
EventSource instance
EventSource interfeiss ir interfeiss starp tīmekļa saturu un serveri, lai nosūtītu notikumus.
Rekvizīts EventHandler
EventSource.onopen tiek izsaukts, kad savienojums ir atvērts. EventSource.onmessage tiek izsaukts, ja ziņojums tiek saņemts bez notikuma atribūta. EventSource.onerror tiek izsaukts savienojuma izņēmumiem.
SSE serveris (ASP.NET kodols)
Izveidojiet jaunu ASP.NET Core projektu, izmantojot .NET 8, un kontrollera kods ir šāds:
Klientam, kas izveido saiti, nosūtiet klientam ziņojumu ik pēc otrā intervāla.
SSE klients
Rakstiet klienta kodu skata lapā, izmantojot html un js šādi:
Sāciet projektu ar šādiem efektiem:
Atsauce:
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama. |