К практике
СреднийWebSocketreal-timeHTTP
🔄MiddleWebSocketreal-timeHTTPсобытиячат
WebSockets и реальное время
Как работает двустороннее общение: чаты, live-обновления, онлайн-игры.
Сравни Polling vs WebSocket
Клиент спрашивает каждые 2 секунды: «есть что-то новое?»
00:00→GET /messages (нет ничего нового)
00:02→GET /messages (нет ничего нового)
00:04→GET /messages (нет ничего нового)
00:06→GET /messages ← 1 сообщение!
00:08→GET /messages (нет ничего нового)
Проблема: 5 запросов — 4 пустых. При 1000 клиентах = 500 пустых запросов/сек впустую.
Язык примеров:
Шаг 1 из 3
1
Проблема: HTTP — только запрос-ответ
Ограничение HTTP
Стандартный HTTP работает только в одну сторону: клиент спрашивает → сервер отвечает. Сервер сам по себе не может ничего отправить клиенту.
Проблема: как реализовать чат?
Short Polling — плохо
javascript
// Каждые 2 секунды спрашиваем: есть что-то новое?
setInterval(async () => {
const messages = await fetch('/api/messages');
// 99% ответов: [] (ничего нового)
}, 2000);Проблемы:
- Огромная нагрузка на сервер (тысячи пустых запросов)
- Задержка до 2 секунд (сообщение придёт не сразу)
- Траффик тратится впустую
Long Polling — лучше, но всё равно неудобно
Клиент делает запрос, сервер держит соединение открытым и отвечает только когда есть данные. Тогда клиент сразу делает новый запрос. Работает, но сложно в реализации.
Нужно постоянное двустороннее соединение
Решение — WebSocket.