advanced
WebSocket APIs
Проектируйте bidirectional sessions с connection lifecycle, authentication, heartbeats, backpressure, ordering и reconnect behavior.
WebSockets дают full-duplex долгоживущие соединения — чат, live dashboards, совместное редактирование, game state. Проектируйте **session lifecycle**, не только happy path.
Поток соединения:
- HTTP upgrade handshake (`Upgrade: websocket`).
- Аутентификация при connect (token в query слаб; лучше short-lived ticket или auth в первом кадре).
- Heartbeats (ping/pong) для мёртвых peers.
- 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.