Sobes.tech
Middle

Защо бяха въведени събитията server-sent в HTML5?

sobes.tech AI

Отговор от AI

Събития, изпратени от сървъра (SSE), са въведени в HTML5 за предаване на данни от сървъра към клиента в една посока, в реално време, чрез HTTP връзка. Това позволява да получавате актуализации от сървъра без необходимостта клиентът постоянно да изпраща заявки (polling). Основните предимства спрямо други технологии:

  • Простота: Използват обикновена HTTP връзка, което улеснява интеграцията с съществуващите уеб технологии и инфраструктура.
  • Ефективност: Позволяват на сървъра да изпраща данни, когато са готови, намалявайки натоварването на мрежата и сървъра в сравнение с често polling.
  • Автоматично повторно свързване: Браузърът автоматично се опитва да възстанови връзката при прекъсване.
  • Вградена обработка: API EventSource в браузъра предоставя прост интерфейс за работа с събития и данни.

Пример за използване на клиента:

// Създаване на нов обект EventSource, указвайки URL на сървъра за SSE
const eventSource = new EventSource('/updates');

// Обработка на събитието 'message' - получаване на данни от сървъра
eventSource.onmessage = function(event) {
  // Извеждане на получените данни в конзолата
  console.log('Нови данни от сървъра:', event.data);
};

// Обработка на грешки при връзката
eventSource.onerror = function(error) {
  console.error('Възникна грешка:', error);
};

На сървъра отговорът трябва да има MIME тип text/event-stream и да бъде форматиран по следния начин:

data: Това е първият ред на данните\n
data: Това е вторият ред на данните\n\n

Всяко съобщение завършва с два символа за нов ред (\n\n). Всеки ред с данни започва с data: . Могат да съществуват и други полета, например event: за указване на типа на събитието или id: за идентификатора на съобщението.

Събитията, изпратени от сървъра, са добър избор за сценарии, при които сървърът трябва да изпраща поток от актуализации към клиента, като известия, новинарски ленти, котировки на акции или резултати от дълги процеси. Те са по-лесни за реализиране от WebSockets за еднопосочна комуникация.