Поиск по сайту
Ctrl + K
Вопросы по JS

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

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


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

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

  • Пример реализации 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.