Wprowadzenie do SSE
SSE oznacza Server-Sent Events, co dosłownie oznacza, że serwer przesyła informacje do klienta. SSE to kanał jednokierunkowy,Serwer może przesyłać informacje tylko do klientaKlient może otrzymać żądanie SSE dopiero po pierwszym wyzwoleniu i nie może odpowiedzieć.
Kluczowe cechy SSE obejmują:
- Łatwość użycia: SSE wykorzystuje formaty danych oparte na tekstach, takie jak tekst zwykły, JSON itp., co ułatwia przesyłanie i analizę danych.
- Komunikacja jednokierunkowa: SSE obsługuje jednokierunkową komunikację między serwerem a klientem, gdzie serwer może aktywnie przesyłać dane do klienta, podczas gdy klient może jedynie je odbierać.
- Czas rzeczywisty: SSE nawiązuje długoterminowe połączenia, pozwalając serwerom przesyłać dane klientom w czasie rzeczywistym bez częstych żądań.
SSE vs. WebSocket
WebSocket to kolejna technologia internetowa wykorzystywana do umożliwienia dwukierunkowej komunikacji w czasie rzeczywistym, która różni się od SSE pod pewnymi względami. Oto porównanie między SSE a WebSocket:
- Kierunek wypychania danych: SSE to jednokierunkowa komunikacja między serwerem a klientem, a serwer może aktywnie przesyłać dane do klienta. WebSocket natomiast to komunikacja dwukierunkowa, umożliwiająca dwukierunkową wymianę danych w czasie rzeczywistym między serwerem a klientem.
- Nawiązywanie połączeń: SSE wykorzystuje długie połączenia oparte na HTTP do nawiązywania połączeń za pomocą zwykłych żądań HTTP i odpowiedzi, a tym samym przesyła dane w czasie rzeczywistym. WebSockety wykorzystują niestandardowe protokoły umożliwiające dwukierunkową komunikację poprzez nawiązywanie połączeń WebSocket.
- Kompatybilność: Ponieważ SSE opiera się na protokole HTTP, może być używany w większości nowoczesnych przeglądarek i nie wymaga dodatkowych aktualizacji protokołu. WebSockety są również wspierane w zdecydowanej większości nowoczesnych przeglądarek, ale mogą stanowić problemy w niektórych specjalnych środowiskach sieciowych.
- Odpowiednie scenariusze: SSE nadaje się do sytuacji, gdy serwer przesyła dane do klienta w czasie rzeczywistym, takie jak aktualizacje cen akcji, aktualizacje wiadomości w czasie rzeczywistym itp. WebSocket nadaje się do sytuacji wymagających dwukierunkowej komunikacji w czasie rzeczywistym, takich jak aplikacje czatu czy wieloosobowa wspólna edycja.
- W zależności od konkretnych potrzeb i sytuacji biznesowej, wybór SSE lub WebSocket zależy od Twoich rzeczywistych potrzeb. Jeśli potrzebujesz serwera tylko do przesyłania danych klientom w jednym kierunku i chcesz, żeby było to proste i kompatybilne, SSE to dobry wybór. Jeśli potrzebujesz dwukierunkowej komunikacji lub bardziej zaawansowanych funkcji i kontroli, WebSocket może być lepszym rozwiązaniem dla Twoich potrzeb.
Format strumienia zdarzeń SSE
Strumień zdarzeń to prosty strumień danych tekstowych, który powinien być zakodowany w formacie UTF-8. Strumień zdarzeńWiadomość jest oddzielona parą podziałów linii。 Komentarze dotyczące zachowania zaczynające się na dwukropek są ignorowane. Każde pole jest reprezentowane nazwą pola, następnie dwuśrednikiem, a następnie tekstowymi danymi o wartości tego pola.
Pola są następujące:
zdarzenie: Ciąg służący do identyfikacji typu zdarzenia. Jeśli ten ciąg jest podany, przeglądarka wysyła zdarzenie o podanej nazwie zdarzenia do odpowiedniego nasłuchu; Klient powinien użyć addEventListener() do nasłuchiwania określonego zdarzenia. Jeśli wiadomość nie podaje nazwy zdarzenia, można wywołać obsługę onmessage.
dane: Pole danych wiadomości. Gdy Źródło Zdarzeń otrzymuje wiele kolejnych linii zaczynających się od danych:, łączy je, wstawiając przerwanie linii pomiędzy nimi. Przerwa na końcu jest usuwana.
id: Event ID, który staje się wartością właściwości wewnętrznej obiektu EventSource aktualnego obiektu EventSource "Last Event ID".
Ponów próbę: czas na ponowne połączenie. Jeśli połączenie z serwerem zostanie utracone, przeglądarka poczeka przez określony czas, a następnie spróbuje ponownie się połączyć. Musi to być liczba całkowita określająca czas ponownego połączenia w milisekundach. Jeśli podana zostanie wartość niecałkowita, pole jest ignorowane.
Instancja EventSource
Interfejs EventSource to interfejs między treściami webowymi a serwerem umożliwiający przesyłanie zdarzeń.
Własność EventHandler
EventSource.onopen jest wywoływany w momencie otwarcia połączenia. EventSource.onmessage jest wywoływany po otrzymaniu wiadomości bez atrybutu zdarzenia. EventSource.onerror jest wywoływany w przypadku wyjątków połączenia.
SSE Server (ASP.NET Core)
Utwórz nowy projekt ASP.NET Core z .NET 8, a kod kontrolera wygląda następująco:
Dla klienta, który nawiązuje łącze, wysyłaj komunikat do klienta co sekundę.
Klient SSE
Napisz kod klienta na stronie View za pomocą html i js w następujący sposób:
Rozpocznij projekt od następujących efektów:
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne. |