«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как работают события, отправленные сервером (SSE)

Как работают события, отправленные сервером (SSE)

Опубликовано 5 ноября 2024 г.
Просматривать:330

How Server-Sent Events (SSE) Work

SSE (события, отправленные сервером) не широко используются в мире веб-разработки. В этой статье мы подробно рассмотрим, что такое SSE, как он работает и какую пользу он может принести. ваше приложение.


Что такое ССЕ?

SSE — это простой и эффективный способ отправки обновлений в реальном времени с сервера клиенту через HTTP-соединение. Он является частью спецификации HTML5 и поддерживается всеми современными веб-браузерами. SSE основан на однонаправленном потоке данных, при котором сервер отправляет сообщения клиенту, но клиент не может отправлять сообщения обратно на сервер.

SSE использует текстовый формат, известный как «События, отправленные сервером», для отправки данных клиенту. Данные отправляются как серия событий, каждое из которых содержит сообщение и необязательный тип события. Тип события используется для различения разных типов сообщений и позволяет клиенту обрабатывать их по-разному.

Как работает ССЕ?

Протокол SSE работает путем установления постоянного HTTP-соединения между сервером и клиентом. Это соединение остается открытым до тех пор, пока клиент хочет получать обновления с сервера. Когда у сервера есть новые данные для отправки, он отправляет HTTP-ответ со специальным типом MIME «text/event-stream».

Ответ содержит серию событий, каждое из которых разделено символом новой строки («\n»). Каждое событие имеет следующий формат:

event: [event type]\n
data: [message]\n\n

Поле «событие» является необязательным и используется для указания названия события. Поле «данные» содержит фактическое отправляемое сообщение. Два символа новой строки в конце каждого события используются для обозначения окончания события.

Вот пример простого ответа SSE:

HTTP/1.1 200 OK
Content-Type: text/event-stream

event: message
data: Hello, world!

event: message
data: This is a test message.

event: customEvent
data: {"foo": "bar", "baz": 123}

В этом примере мы отправляем клиенту три события. Первые два события имеют тип события «сообщение» и содержат простые текстовые сообщения. Третье событие имеет тип события «customEvent» и содержит объект JSON в качестве сообщения.

Когда клиент получает ответ SSE, он использует данные для обновления своего пользовательского интерфейса. Это можно сделать, например, с помощью JavaScript для управления DOM.

Внедрение SSE

Реализовать SSE в вашем приложении относительно просто. Вот пример реализации SSE с использованием Node.js и платформы Express:

const express = require('express');
const app = express();

// Set up SSE endpoint
app.get('/events', (req, res) => {
  // Set headers
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');
  // Send initial event
  res.write('data: Connected\n\n');
  // Set interval to send periodic events
  const intervalId = setInterval(() => {
    res.write('data: Hello, world!\n\n');
  }, 1000);
  // Clean up on connection close
  req.on('close', () => {
    clearInterval(intervalId);
  });
});

// Start server
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

В этом примере мы настраиваем конечную точку SSE в «/events». Мы устанавливаем необходимые заголовки для SSE и отправляем клиенту начальное событие для подтверждения того, что соединение установлено.

Затем мы устанавливаем интервал для отправки периодических событий клиенту каждую секунду. Наконец, мы очищаем интервал закрытия соединения клиентом.

На стороне клиента мы можем использовать следующий код JavaScript для прослушивания событий SSE:

const source = new EventSource('/events');

source.addEventListener('message', (event) => {
  console.log(event.data);
});
source.addEventListener('error', (event) => {
  console.error('Error:', event);
});

В этом примере мы создаем новый объект EventSource и передаем URL-адрес нашей конечной точки SSE. Затем мы прослушиваем событие «сообщение» и записываем данные в консоль. Мы также прослушиваем событие «ошибка» на случай возникновения проблем с подключением.

Обратите внимание, что путь EventSource во внешнем интерфейсе может использоваться только запросами GET. Если вы хотите использовать POST и другие методы HTTP, вам необходимо самостоятельно проанализировать данные ответа.

Если вам нужна собственная реализация Node.js, вот она

Варианты использования SSE

SSE можно использовать в широком спектре приложений, требующих обновлений в реальном времени. Вот несколько примеров:

  • Платформы социальных сетей: SSE можно использовать для предоставления обновлений в реальном времени для платформ социальных сетей, таких как уведомления о новых сообщениях, комментариях или лайках.

  • Финансовые приложения: SSE можно использовать для предоставления обновлений в реальном времени для финансовых приложений, таких как цены на акции, курсы валют или новости.

  • Онлайн-игры: SSE можно использовать для предоставления обновлений в реальном времени для игровых онлайн-приложений, например уведомлений об игровых событиях, результатах или рейтингах.

Преимущества использования SSE

Использование SSE имеет несколько преимуществ по сравнению с другими методами связи в реальном времени, такими как опрос или WebSockets:

Эффективность

SSE использует постоянное HTTP-соединение, а это означает, что затраты на установление и поддержание соединения намного ниже, чем при использовании других методов. Это делает SSE более эффективным и менее ресурсоемким, что особенно важно при работе с большим количеством клиентов.

Простота

SSE — это простой протокол, который легко понять и реализовать. Он не требует каких-либо специальных библиотек или фреймворков и может быть реализован с использованием стандартных веб-технологий, таких как JavaScript и HTTP.

Надежность

SSE — надежный протокол, обеспечивающий автоматическое переподключение в случае сбоя в сети. Это гарантирует, что клиент продолжит получать обновления, даже если соединение временно потеряно.

Заключение

События, отправленные сервером (SSE) — это простой и эффективный способ отправки обновлений в реальном времени с сервера клиенту через HTTP-соединение. Он является частью спецификации HTML5 и поддерживается всеми современными веб-браузерами. SSE использует однонаправленный поток данных, при котором сервер отправляет сообщения клиенту, но клиент не может отправлять сообщения обратно на сервер. Это избавляет вас от постоянного опроса сервера на наличие событий, что не только повышает производительность, но и снижает сложность.

Если вы нашли это полезным, рассмотрите подписку на мою рассылку новостей чтобы получать больше полезных статей и инструментов о веб-разработке. Спасибо за прочтение!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/zacharylee/how-server-sent-events-sse-work-450a?1. В случае нарушения авторских прав свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3