Назад к вопросам
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 // Задержка перед следующим переподключением в миллисекундах