StudyCode
К практике
СреднийWebSocketreal-timeHTTP
🔄MiddleWebSocketreal-timeHTTPсобытиячат

WebSockets и реальное время

Как работает двустороннее общение: чаты, live-обновления, онлайн-игры.

Сравни Polling vs WebSocket

Клиент спрашивает каждые 2 секунды: «есть что-то новое?»

00:00GET /messages (нет ничего нового)
00:02GET /messages (нет ничего нового)
00:04GET /messages (нет ничего нового)
00:06GET /messages ← 1 сообщение!
00:08GET /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.