Sobes.tech
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 // Забавяне преди следващото повторно свързване в милисекунди