Как работает двустороннее общение: чаты, live-обновления, онлайн-игры.
Стандартный HTTP работает только в одну сторону: клиент спрашивает → сервер отвечает. Сервер сам по себе не может ничего отправить клиенту.
// Каждые 2 секунды спрашиваем: есть что-то новое?
setInterval(async () => {
const messages = await fetch('/api/messages');
// 99% ответов: [] (ничего нового)
}, 2000);Проблемы:
Клиент делает запрос, сервер держит соединение открытым и отвечает только когда есть данные. Тогда клиент сразу делает новый запрос. Работает, но сложно в реализации.
Решение — WebSocket.
Клиент спрашивает каждые 2 секунды: «есть что-то новое?»
Проблема: 5 запросов — 4 пустых. При 1000 клиентах = 500 пустых запросов/сек впустую.