Ответ
Server-Sent Events (SSE) — это технология, которая позволяет веб-серверу отправлять обновления клиенту в одностороннем порядке по одному долгоживущему HTTP-соединению. Как только соединение установлено, сервер может отправлять данные клиенту по мере их появления.
Ключевое отличие от WebSocket в том, что SSE — это однонаправленный канал (сервер → клиент), в то время как WebSocket обеспечивает двунаправленную связь.
Принцип работы:
- Клиент отправляет обычный HTTP-запрос на специальный эндпоинт.
- Сервер отвечает заголовком
Content-Type: text/event-stream
и оставляет соединение открытым. - Сервер отправляет сообщения в формате
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.