Вопросы по JS

Что такое Server-Sent Events (SSE)?

Server-Sent Events (SSE) — это технология, позволяющая серверу отправлять обновления клиенту через однонаправленное соединение по протоколу HTTP. SSE используется для потоковой передачи данных, например, уведомлений, обновлений чатов и данных в реальном времени.


Как работает SSE?

  1. Клиент устанавливает соединение с сервером, используя EventSource.
  2. Сервер отправляет события в формате text/event-stream.
  3. Клиент обрабатывает события с помощью JavaScript.
  4. Соединение остаётся открытым, пока сервер не закроет его или не возникнет ошибка.

Пример реализации SSE

1. Серверная часть (Node.js + Express)

const express = require("express");
const app = express();

app.get("/events", (req, res) => {
    res.setHeader("Content-Type", "text/event-stream");
    res.setHeader("Cache-Control", "no-cache");
    res.setHeader("Connection", "keep-alive");

    setInterval(() => {
        res.write(`data: ${JSON.stringify({ time: new Date().toISOString() })}\n\n`);
    }, 3000);
});

app.listen(3000, () => console.log("SSE сервер запущен на порту 3000"));

2. Клиентская часть (HTML + JavaScript)

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>SSE Пример</title>
</head>
<body>
    <h1>Обновления от сервера:</h1>
    <div id="messages"></div>

    <script>
        const eventSource = new EventSource("/events");

        eventSource.onmessage = (event) => {
            const data = JSON.parse(event.data);
            document.getElementById("messages").innerHTML += `<p>Новое событие: ${data.time}</p>`;
        };

        eventSource.onerror = () => {
            console.error("Ошибка соединения с сервером");
        };
    </script>
</body>
</html>

Преимущества SSE

Простая реализация — использует стандартный HTTP и JavaScript API.
Поддержка автоматического переподключения (встроена в EventSource).
Более эффективен, чем периодические AJAX-запросы (polling).
Поддержка текстового потока (JSON, XML).


Ограничения SSE

Однонаправленность — сервер может только отправлять данные клиенту.
Поддержка только HTTP/1.1, не работает через WebSockets.
Ограничения на количество открытых соединений (6 соединений на домен в большинстве браузеров).


Когда использовать SSE?

  • Реальное время для уведомлений, лент новостей, аналитики.
  • Потоковые обновления биржевых данных, спортивных событий.
  • Логирование и мониторинг серверных процессов.

Если нужно двустороннее общение (сервер ↔ клиент), лучше использовать WebSockets.