Назад к вопросам
Middle+
85
questionbank

Для чего в HTML5 были введены события server-sent?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для реализации однонаправленного канала связи между сервером и клиентом. Сервер может отправлять данные клиенту в любое время после установления соединения.

Ключевые особенности и преимущества:

  • Эффективность: Используется обычный HTTP-соединение, минимизируя накладные расходы по сравнению с polling.
  • Простота: API server-sent events (SSE) проще в использовании, чем WebSockets для однонаправленной связи.
  • Автоматическое переподключение: Браузер автоматически пытается переподключиться при обрыве соединения.
  • Поддержка типов данных: Поддерживается отправка текстовых данных в формате text/event-stream.
  • Поддержка браузерами: Широко поддерживается современными браузерами.

Применение:

  • Обновление новостных лент в реальном времени.
  • Уведомления о событиях (например, о новых сообщениях).
  • Мониторинг данных в реальном времени (например, биржевые котировки).
  • Прогресс выполнения длительных задач.

Это альтернатива традиционному polling, где клиент периодически запрашивает у сервера наличие обновлений. В отличие от WebSockets, SSE однонаправленные, что упрощает их применение, когда данные передаются только от сервера к клиенту.

Пример на стороне клиента (JavaScript):

const eventSource = new EventSource('/events'); // URL для получения событий с сервера

eventSource.onmessage = function(event) {
  // Обработка полученных данных
  console.log('Получено сообщение:', event.data);
};

eventSource.onerror = function(error) {
  // Обработка ошибок соединения
  console.error('Ошибка Server-Sent Events:', error);
};

eventSource.addEventListener('customEvent', function(event) {
  // Обработка кастомного события с типом 'customEvent'
  console.log('Получено кастомное событие:', event.data);
});

Пример формата данных на стороне сервера:

event: customEvent
data: {"message": "Привет!"}

data: Простой текст сообщения

id: 123 // Идентификатор события, используется для автоматического переподключения

retry: 5000 // Задержка перед следующим переподключением в миллисекундах