advanced

WebSocket APIs

Проектируйте bidirectional sessions с connection lifecycle, authentication, heartbeats, backpressure, ordering и reconnect behavior.

WebSockets дают full-duplex долгоживущие соединения — чат, live dashboards, совместное редактирование, game state. Проектируйте **session lifecycle**, не только happy path.

Поток соединения:

  1. HTTP upgrade handshake (`Upgrade: websocket`).
  2. Аутентификация при connect (token в query слаб; лучше short-lived ticket или auth в первом кадре).
  3. Heartbeats (ping/pong) для мёртвых peers.
  4. Reconnect с resume token или snapshot + delta sync.
					// Server message envelope
{ "type": "order.updated", "seq": 42, "payload": { "id": "1", "status": "SHIPPED" } }
				

Операционные аспекты:

  • **Backpressure**: медленным клиентам нужны ограниченные outbound buffers или политика drop.
  • **Ordering**: sequence numbers по каналу; идемпотентные handlers.
  • **Scale**: sticky sessions или pub/sub bridge (Redis, NATS) между инстансами.
  • **AuthZ**: подписка только на разрешённые каналы.

На интервью: WebSocket vs SSE, защита соединений, горизонтальное масштабирование.

Типовые ошибки: нет heartbeat, неограниченный in-memory fan-out, WS как «бесплатный» long polling, нет восстановления состояния при reconnect.

Компромисс: realtime UX против стоимости соединений и инфраструктуры — измеряйте concurrent connections и egress.

Чеклист:

  • Auth при connect; re-auth при смене прав.
  • Heartbeats и idle timeouts.
  • Версионирование схемы сообщений.
  • Горизонтальный scale через shared pub/sub.