Что такое Server-Sent Events (SSE) и как они работают

Ответ

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

Ключевое отличие от WebSocket в том, что SSE — это однонаправленный канал (сервер → клиент), в то время как WebSocket обеспечивает двунаправленную связь.

Принцип работы:

  1. Клиент отправляет обычный HTTP-запрос на специальный эндпоинт.
  2. Сервер отвечает заголовком Content-Type: text/event-stream и оставляет соединение открытым.
  3. Сервер отправляет сообщения в формате data: <сообщение>nn.

Пример сервера на Python (Flask):

from flask import Flask, Response
import time
from datetime import datetime

app = Flask(__name__)

@app.route('/stream')
def stream():
    def event_stream():
        while True:
            # Отправляем данные в формате SSE
            yield f"data: Текущее время: {datetime.now()}nn"
            time.sleep(1) # Пауза, чтобы не перегружать клиент
    return Response(event_stream(), mimetype='text/event-stream')

Пример клиента на JavaScript:

// Создаем подключение к эндпоинту
const eventSource = new EventSource('/stream');

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

// Обработчик ошибок
eventSource.onerror = function(err) {
    console.error('Ошибка EventSource:', err);
};

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

  • Для систем уведомлений (нотификации, обновления статусов).
  • Для отображения данных в реальном времени (биржевые котировки, спортивные результаты).
  • Когда не требуется двусторонняя связь с клиентом, что делает SSE проще и легче в реализации, чем WebSocket.