Middle+
Защо бяха въведени събитията server-sent в HTML5?
sobes.tech AI
Отговор от AI
За реализиране на еднопосочен канал за комуникация между сървър и клиент. Сървърът може да изпраща данни към клиента по всяко време след установяване на връзката.
Ключови характеристики и предимства:
- Ефективност: Използва обикновена HTTP връзка, минимизирайки разходите в сравнение с polling.
- Простота: API за събития, изпращани от сървъра (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 // Забавяне преди следващото повторно свързване в милисекунди