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. |
Практические решения
- 01
Нужны HTTP routes и WebSocket gateway в одном процессе
Используйте общий server lifecycleТак upgrade, ошибки и завершение не становятся разрозненными подсистемами.
- 02
Клиенты могут читать медленнее отправителя
Сделайте pressure частью протоколаНужны ограничение, observable policy и клиентское восстановление, а не надежда на бесконечную очередь.
- 03
Нужны гарантии после disconnect
Добавьте внешний durable transportWebSocket socket сам по себе не является журналом сообщений или гарантированной доставкой.
Границы WebSocket-транспорта
- Соединение не заменяет аутентификацию, авторизацию и проверку origin в момент upgrade.
- Pub/sub удобен для живой доставки, но replay и durability требуют отдельного хранилища или брокера.
- Нагрузка должна включать медленных получателей и reconnect, а не только быстрое echo-соединение.
Первичные источники
Контракт сверяется с фиксированной версией README и метаданными пакета, а не с обещаниями в маркетинговом сравнении.