НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
HTML5. Уроки для початківців. W3Schools українською

En Es De

HTML5 Події, відправлені сервером


Для чого потрібні події, відправлені сервером? (Server-Sent Events - SSE)

Події, відправлені сервером (Server-Sent Events - SSE) дозволяють веб-сторінці отримувати оновлення з сервера.


Події, відправлені сервером - це односторонні повідомлення

Події, відправлені сервером - це коли веб-сторінка автоматично отримує оновлення з сервера.

Це також було можливим і раніше, але на веб-сторінці необхідно було зробити запит, чи доступні оновлення. З подіями, відправленими сервером, оновлення відправляються автоматично.

Приклади: Facebook/Twitter оновлення, оновлення цін на акції, новостійні стрічки, спортивні результати і таке інше.


Підтримка браузерами

Цифри в таблиці визначають першу версію браузера, яка повністю підтримує події, відправлені сервером.

API
SSE 6.0 Не підтримується 6.0 5.0 11.5

Отримувати сповіщення про відправлені сервером події

Об’єкт EventSource використовується для отримання повідомлень про події, які відправляються сервером:

Приклад

var source = new EventSource("demo_sse.html");
source.onmessage = function(event) {
  document.getElementById("result").innerHTML += event.data + "<br>";
};
Спробуйте самі »

Пояснення прикладу:

  • Створіть новий об’єкт EventSource та вкажіть URL-адресу сторінки, яка відправляє оновлення (в цьому прикладі "demo_sse.html")
  • Кожен раз при отриманні оновлення відбувається подія onmessage
  • Коли відбувається подія onmessage, розмістіть отримані дані в елемент з id="result"

Перевірте підтримку подій, відправлених сервером

В наведеному вище прикладі "Спробуйте самі" було декілька додаткових рядків коду для перевірки підтримки браузером відправлених сервером подій:

if(typeof(EventSource) !== "undefined") {
  // Так! Відправлення подій на сервер підтримується!
  // Якийсь код.....
} else {
  // На жаль, відправлення подій на сервер не підтримується.
}

Приклад коду на стороні сервера

Для наведеного вище прикладу потрібен сервер, який може відправляти оновлення даних (наприклад, PHP або ASP).

Синтаксис потоку подій на стороні сервера простий. Встановіть заголовок "Content-Type" на "text/event-stream". Тепер ви можете почати відправляти потоки подій.

Код на PHP (demo_sse.html):

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>

Код на ASP (VB) (demo_sse.asp):

<%
Response.ContentType = "text/event-stream"
Response.Expires = -1
Response.Write("data: The server time is: " & now())
Response.Flush()
%>

Пояснення коду:

  • Встановіть заголовок "Content-Type" в "text/event-stream"
  • Вкажіть, що сторінка не повинна кешируватись (not cache)
  • Виведіть дані, які необхідно відправити. (Завжди потрібно починати з "data: ")
  • Скиньте вихідні дані назад на вебсторінку

Об’єкт EventSource

В наведених вище прикладах ми використовували подію onmessage для отримання повідомлень. Але доступні й інші події:

Події Опис
onopen Коли відкрито з’єднання із сервером
onmessage Коли отримано повідомлення
onerror Коли виникла помилка


Коментарі