Загрузка...
Загрузка...
Все три технологии — способы получения данных с сервера в браузере. Они позволяют обновлять клиент в реальном или почти реальном времени, особенно при отсутствии WebSockets.
Клиент периодически опрашивает сервер: «Есть что-то новенькое?»
GET /datasetInterval(() => {
fetch('/data')
.then(res => res.json())
.then(data => console.log(data));
}, 5000); // Запрос каждые 5 сек
Улучшенная версия обычного polling'а: запрос живёт до появления новых данных.
function longPolling() {
fetch('/data')
.then(res => res.json())
.then(data => {
console.log(data);
longPolling(); // Цикл продолжается
});
}
longPolling();
SSE — это постоянное соединение, по которому сервер отправляет данные клиенту, когда захочет.
Это однонаправленное соединение: только сервер → клиент
EventSourcetext/event-streamconst eventSource = new EventSource('/events');
eventSource.onmessage = (event) => {
console.log("Новое сообщение:", event.data);
};
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() })}\n\n`);
}, 3000);
});
| Метод | Направление | Постоянное соединение | Мгновенность | Сложность | Поддержка |
|---|---|---|---|---|---|
| Polling | Client → Server | Нет | Нет | Простая | Все |
| Long Polling | Client → Server | Временно | Почти | Средняя | Все |
| SSE | Server → Client | Да | Да | Средняя | Почти все (кроме IE) |
Вывод:
Polling — это просто, но неэффективно. Long Polling — компромисс. SSE — отличное решение для real-time без использования WebSocket. Выбор зависит от направления связи, нагрузки, требований к latency и браузерной поддержки.