Field guide · WebSocket

WebSocket-сервер Node.js: что важно в production?

Короткий ответ

WebSocket-сервер становится production-готовым, когда upgrade валидируется до открытия соединения, состояние связано с конкретным connection context, pressure имеет измеримую политику, а shutdown закрывает новые upgrades и ограниченно ждёт активную работу. swm-core 5.1.2 объединяет HTTP и WebSocket lifecycle в одном server instance.

HTTP → WS
явный upgrade
pub/sub
темы и delivery
22 / 24
Node.js

Границы ответа

Страница фиксирует API и границы @swarmmachina/swm-core 5.1.2 для Node.js 22/24. Она не обещает доставку каждого сообщения при любой нагрузке и не заменяет политику клиента, proxy и брокера.

Контракт WebSocket-соединения

ОбластьЯвный контрактПроверка до запуска
UpgradeАвторизация, origin и нужные headers валидируются до вызова upgrade.Отклонённый upgrade не создаёт socket и не вызывает open handler.
КонтекстConnection data принадлежит одному socket и не смешивается с соседними соединениями.Параллельный тест проверяет isolation tenant, principal и connectionKey.
СообщенияРазмер, формат и обработка некорректного payload определены до business handler.Проверьте oversized, malformed и непредвиденный binary/text message.
BackpressureПоведение очереди и медленного клиента измеримо; код не считает каждую send безусловно доставленной.Нагрузочный тест включает slow receiver и фиксирует close/drop policy.
Pub/subТема, бинарный формат и граница доставки известны вызывающему коду.Проверьте join/leave, broadcast и отсутствие доставки после закрытия socket.
ShutdownПриложение перестаёт принимать upgrades и завершает соединения по зафиксированной политике.Интеграционный тест отличает штатный drain от немедленного close.

Практические решения

  1. 01

    Нужны HTTP routes и WebSocket gateway в одном процессе

    Используйте общий server lifecycle

    Так upgrade, ошибки и завершение не становятся разрозненными подсистемами.

  2. 02

    Клиенты могут читать медленнее отправителя

    Сделайте pressure частью протокола

    Нужны ограничение, observable policy и клиентское восстановление, а не надежда на бесконечную очередь.

  3. 03

    Нужны гарантии после disconnect

    Добавьте внешний durable transport

    WebSocket socket сам по себе не является журналом сообщений или гарантированной доставкой.

Границы WebSocket-транспорта

  • Соединение не заменяет аутентификацию, авторизацию и проверку origin в момент upgrade.
  • Pub/sub удобен для живой доставки, но replay и durability требуют отдельного хранилища или брокера.
  • Нагрузка должна включать медленных получателей и reconnect, а не только быстрое echo-соединение.

Первичные источники

Контракт сверяется с фиксированной версией README и метаданными пакета, а не с обещаниями в маркетинговом сравнении.