Граф знанийНастройки

Обновлено: 24 марта 2026 г. в 11:23

WebSocket протокол

medium

Дуплексный канал поверх HTTP Upgrade: установка соединения и обмен сообщениями в реальном времени.

Глава про WebSocket важна тем, что здесь архитектура перестает быть набором независимых запросов и превращается в систему долгоживущих соединений и состояния на сервере.

На практике она помогает проектировать realtime-контуры с учетом fan-out, backpressure, reconnect, heartbeat и graceful shutdown, то есть тех деталей, на которых обычно и ломается надежность.

В интервью и архитектурных обсуждениях материал полезен тем, что позволяет обсуждать realtime не как «HTTP, но быстрее», а как отдельный класс эксплуатационных компромиссов.

Практическая польза главы

Realtime channel design

Помогает проектировать постоянные соединения, учитывая fan-out, backpressure и state management.

Connection lifecycle

Учит управлять reconnect, heartbeat и graceful shutdown для надежного realtime сервиса.

Scale implications

Показывает, как соединения влияют на балансировку, sticky sessions и ресурсы инфраструктуры.

Interview robustness

Усиливает ответы на realtime-кейсы за счет ясной модели отказов и эксплуатационных компромиссов.

RFC

RFC 6455 (WebSocket Protocol)

Базовая спецификация handshake, frame-формата, управления соединением и close-кодов.

Перейти на сайт

WebSocket - прикладной протокол для постоянного двустороннего обмена сообщениями между клиентом и сервером. Он снижает накладные расходы на частые запросы и подходит для realtime-сценариев, где важны latency, стабильность канала и управляемый fan-out.

Ключевые свойства WebSocket

Upgrade от HTTP

Сессия начинается через HTTP/1.1 Upgrade, после чего протокол переключается на WebSocket frames.

Full-duplex обмен

Клиент и сервер отправляют сообщения независимо, без запроса-ответа на каждый пакет данных.

Долгоживущие соединения

Один канал может работать часами, снижая накладные расходы на частые reconnect и handshakes.

Управление liveness

Ping/pong и heartbeat помогают быстро обнаруживать разрывы и восстанавливать канал.

Backpressure и fan-out

При burst-рассылке важно контролировать очереди сообщений и скорость отправки на медленных клиентах.

Визуализация содержимого WebSocket frame

Формат фрейма определяет тип сообщения, длину payload и правила маскирования в клиент-серверном обмене.

WebSocket Frame (упрощённо)

2+ bytes header + payload

FIN/RSV/Opcode

8 bits

MASK + Payload len

8 bits

Extended length (optional)

16 bits

Masking key (client -> server, optional)

32 bits

Payload data (variable)

32 bits

В браузерных клиентах payload обычно маскируется (masking key), а сервер отправляет ответы без маски. Размер payload может быть расширенным (16/64-bit), если сообщение крупнее базового диапазона.

Жизненный цикл WebSocket соединения

Handshake и аутентификация

Клиент делает HTTP Upgrade, сервер подтверждает 101 и применяет auth/policy до открытия канала.

Устойчивый обмен событиями

После открытия идут двусторонние message frames, heartbeat и подписки на каналы/темы.

Перегрузка и деградация

При росте fan-out появляются backlog и timeouts; нужны rate limit, backpressure и selective drop.

Закрытие и reconnect

Стороны закрывают соединение code/reason, клиент восстанавливает канал с backoff и jitter.

Upgrade и двусторонний обмен сообщениями

Сначала происходит HTTP Upgrade до WebSocket, после чего канал работает в full-duplex режиме и позволяет передавать события без повторного запроса на каждое обновление.

HTTP → WebSocket Upgrade

Нажмите на шаг или используйте кнопки, чтобы проиграть upgrade и обмен сообщениями

Состояние

Нажмите «Начать», чтобы увидеть процесс перехода от HTTP к WebSocket.

КлиентСервер
Клиент
-
Сервер

Соединение открыто и готово к обмену.

Детали

Здесь появятся ключевые заголовки и примеры сообщений.

Динамика WebSocket-канала под нагрузкой

Пошагово смотрите, как меняются fan-out, delivery latency и reconnect-rate при росте realtime-трафика.

ШагИнтервал 1 (1 из 7)
p95 delivery (ms)Backlog (%)Reconnect rate (%)

Фаза

Стабильный канал

Активные соединения

18.0k

Поток сообщений

95 kpps

p95 delivery

42 ms

Backlog

18.0%

Reconnect rate

0.4%

Митигация: Базовый heartbeat

Что происходит: Подключения стабильны: сообщения доставляются с низкой задержкой и минимальными reconnection.

Расшифровка обозначений

  • kpps (kilo packets/messages per second) — тысячи сообщений в секунду.
  • p95 delivery — задержка доставки, ниже которой укладываются 95% сообщений.

Что означают метрики

  • Fan-out — рассылка одного события сразу множеству активных подписчиков.
  • Backlog — заполнение очереди сообщений, ожидающих отправку клиентам.

Связанная глава

Load Balancing

Как распределять long-lived WebSocket-сессии и избегать hotspot-ов на gateway-слое.

Открыть главу

Как сеть и маршрутизация влияют на WebSocket

L4/L7 маршрутизация

Неправильная балансировка long-lived соединений создаёт hotspot-ы и неравномерный расход ресурсов нод.

Idle timeout в proxy/NAT

Stateful middlebox может разрывать idle-соединения: heartbeat interval нужно согласовывать с сетевой инфраструктурой.

TLS termination cost

Массовое число WebSocket-сессий увеличивает нагрузку на edge-терминацию TLS и CPU proxy-слоя.

Packet loss и mobile-сети

Потери и флапы сети провоцируют reconnect waves, которые могут перегружать auth и session storage.

Fan-out path длина

Чем больше hops между producer и gateway, тем выше tail latency доставки событий до клиента.

Где WebSocket используется чаще всего

  • Чаты, коллаборативные редакторы и presence-сервисы
  • Live-дашборды, алерты и мониторинг в реальном времени
  • Торговые и финтех-ленты с частыми обновлениями
  • Realtime-геймплей и event-stream между клиентом и backend
  • Signaling-канал для WebRTC и push-команд

Почему это важно для System Design

  • WebSocket меняет профиль нагрузки: важны не только RPS, но и число активных long-lived соединений.
  • Realtime-функции требуют контроля backlog, latency доставки и reconnect-storm рисков.
  • Неверная стратегия балансировки быстро создаёт hotspot-ы и деградацию пользовательского опыта.
  • Правильные heartbeat/retry/policy решения уменьшают blast radius сетевых инцидентов.

Частые ошибки

Не ограничивать fan-out и отправлять без backpressure, перегружая медленных клиентов и gateway-узлы.

Игнорировать heartbeat/timeout политику и получать массовые ложные reconnect при сетевых флапах.

Хранить сессионное состояние только в памяти одной ноды без sticky routing или shared state.

Считать WebSocket заменой всех API и смешивать запросные и streaming-сценарии без явных SLA.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки