Ответ
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.
Ответ 18+ 🔞
А, слушай, вот эта штука — 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:
# Вот тут и происходит магия: плюём данные в поток
yield f"data: Текущее время: {datetime.now()}nn"
time.sleep(1) # Чуть притормаживаем, а то клиент с ума сойдёт от скорости
return Response(event_stream(), mimetype='text/event-stream')
А на клиенте (в браузере) всё вообще элементарно:
// Подключаемся к этому самому потоку
const eventSource = new EventSource('/stream');
// Ловим всё, что сервер швыряет
eventSource.onmessage = function(event) {
console.log('Новое сообщение:', event.data);
// Можно, например, запихнуть это в интерфейс
};
// На всякий случай ловим косяки
eventSource.onerror = function(err) {
console.error('Ошибка EventSource:', err);
// Тут можно попробовать переподключиться, например
};
Так когда же эту технологию, блядь, применять? Да когда угодно, где нужно просто получать обновления, а не диалог вести!
- Уведомления всякие: пришло новое сообщение, задача изменила статус, заказ готов — сервер пихнул событие, а у тебя на экране всплыло.
- Данные в реальном времени: курс биткоина упал в пизду, твоя футбольная команда забила гол, температура на сервере подскочила до овердохуища — всё это льётся потоком.
- Когда двусторонняя связь не нужна. Зачем городить сложный WebSocket, если можно обойтись этой простой, лёгкой, как пёрышко, технологией? Экономия, сука, ресурсов и нервов!
Вот и вся наука. Просто, эффективно, и не надо выёбываться с лишней сложностью.