Введение в SSE
SSE означает Server-Sent Events, что буквально означает, что сервер отправляет информацию клиенту. SSE — это односторонний канал,Сервер может отправлять информацию только клиентуКлиент может получить запрос SSE только после первого запуска и не может ответить.
Ключевые особенности SSE включают:
- Простота использования: SSE использует текстовые форматы данных, такие как обычный текст, JSON и др., что делает отправку и разбор данных относительно простым.
- Односторонняя связь: SSE поддерживает одностороннюю связь между сервером и клиентом, при которой сервер может активно отправлять данные клиенту, а клиент — только получать данные.
- В реальном времени: SSE устанавливает долгосрочные соединения, позволяя серверам передавать данные клиентам в реальном времени без частых запросов.
SSE против WebSocket
WebSocket — ещё одна веб-технология, используемая для обеспечения двусторонней связи в реальном времени, которая в некоторых аспектах отличается от SSE. Вот сравнение SSE и WebSocket:
- Направление передачи данных: SSE — это односторонняя связь между сервером и клиентом, и сервер может активно передавать данные клиенту. WebSocket, напротив, представляет собой двунаправленную связь, позволяющую в реальном времени обмениваться двусторонними данными между сервером и клиентом.
- Установление соединений: SSE использует длинные HTTP-соединения для установления соединений через обычные HTTP-запросы и ответы, тем самым обеспечивая передачу данных в реальном времени. WebSockets используют пользовательские протоколы для обеспечения двусторонней связи путем установления WebSocket-соединений.
- Совместимость: поскольку SSE основан на протоколе HTTP, он может использоваться в большинстве современных браузеров и не требует дополнительных обновлений протокола. WebSockets также поддерживаются в подавляющем большинстве современных браузеров, но они могут создавать проблемы в некоторых специальных сетевых средах.
- Применимые сценарии: SSE подходит для случаев, когда сервер отправляет данные клиенту в реальном времени, например, обновления цен акций, новости в реальном времени и т.д. WebSocket подходит для сценариев, требующих двустороннего общения в реальном времени, таких как чат-приложения и многоперсональное совместное редактирование.
- В зависимости от ваших конкретных бизнес-потребностей и сценариев, выбор SSE или WebSocket зависит от ваших реальных потребностей. Если вам нужен сервер только для передачи данных клиентам в одном направлении и вы хотите сделать всё просто и совместимым, SSE — хороший выбор. Если вам нужен двухсторонний обмен или более продвинутые функции и управление, WebSocket может лучше подойти для ваших нужд.
Формат трансляции событий SSE
Поток событий — это простой поток текстовых данных, который следует кодировать в формате UTF-8. Поток событийСообщение разделяется парой разрывов строк。 Реплики в комментариях к поведению, начинающиеся на двоеточие, игнорируются. Каждое поле представлено именем поля, затем двоеточием, а затем текстовыми данными значения этого поля.
Поля следующие:
событие: Строка, используемая для определения типа события. Если эта строка указана, браузер отправляет событие с указанным именем события соответствующему слушателю; Клиент должен использовать addEventListener() для прослушивания указанного события. Если сообщение не указывает имя события, тогда можно вызвать обработчик onmessage.
данные: Поле данных сообщения. Когда EventSource получает несколько последовательных строк, начинающихся с data:, он объединяет их, вставляя между ними разрыв строки. Разрыв строки в конце удаляется.
идентификатор: Event ID, который становится значением свойства внутреннего свойства текущего объекта EventSource «Last Event ID».
снова пробовать: время восстановить связь. Если соединение с сервером теряется, браузер ждёт указанного времени и попытается подключиться снова. Это должно быть целое число, указывающее время повторного подключения в миллисекундах. Если задано нецелое значение, поле игнорируется.
экземпляр EventSource
Интерфейс EventSource — это интерфейс между веб-контентом и сервером для отправки событий.
Свойство EventHandler
EventSource.onopen вызывается, когда соединение открыто. EventSource.onmessage вызывается, когда сообщение получено без атрибута события. EventSource.onerror вызывается при исключениях соединения.
SSE сервер (ASP.NET Core)
Создайте новый проект ASP.NET Core с .NET 8, и код контроллера выглядит следующим образом:
Для клиента, который устанавливает связь, отправляйте сообщение клиенту каждые секунды.
Клиент SSE
Пишите клиентский код на странице View с использованием html и js следующим образом:
Начните проект со следующими эффектами:
Ссылка:
Вход по гиперссылке виден.
Вход по гиперссылке виден.
Вход по гиперссылке виден. |