Decision record · server stack

swm-core или swm-uws для Node.js?

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

Для прикладного HTTP/WebSocket-сервиса выбирайте swm-core: он добавляет routing, request context, body budgets, выборочный header prefetch, явную trusted-proxy policy, timeouts, backpressure и graceful shutdown. Выбирайте swm-uws, когда нужен совместимый низкоуровневый uWebSockets.js API и команда готова самостоятельно владеть серверным lifecycle.

5.1.2
swm-core
0.7.3
swm-uws
22 / 24
Node.js

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

Сравнение фиксирует @swarmmachina/swm-core 5.1.2 и @swarmmachina/swm-uws 0.7.3 для Node.js 22/24. Оба пакета используют MPL-2.0.

Сравнение уровней серверного стека

Критерийswm-coreswm-uws
УровеньГотовый HTTP/WebSocket server layer.Нативный V8 binding совместимой non-TLS поверхности uWebSockets.js.
HTTPRoutes, before hooks, контексты, body parsing, CORS и static helpers.App.get/post/any и прямое владение request/response callback.
WebSocketUpgrade contract, context, pub/sub, connectionKey и управляемое завершение.App.ws behavior и низкоуровневые WebSocket callbacks.
РесурсыBody budgets, per-route body limits, header prefetch, async timeout, trusted proxy, transport policy и пулы контекстов.Per-App parser/time limits и counters; общий body budget и admission control принадлежат приложению.
Shutdownshutdown(timeout) ждёт активную работу; close() завершает немедленно.Команда сама координирует listen socket, запросы и соединения.
Стоимость владенияБольше готовых контрактов, меньше прикладной инфраструктуры.Меньше абстракций, больше собственного lifecycle-кода и тестов.

Выбор по задаче

  1. 01

    Обычный production API или WebSocket gateway

    Начинайте со swm-core

    Серверные лимиты и завершение уже являются частью контракта.

  2. 02

    Порт существующего uWebSockets.js приложения

    Рассмотрите swm-uws

    Есть совместимый non-TLS API и npm alias для uwebsockets.js.

  3. 03

    Нужен собственный framework layer

    Стройте поверх swm-uws

    Только если команда явно принимает владение routing, safety, shutdown и regression tests.

Проверки перед выбором

  • Оба пакета поддерживают только перечисленную матрицу Node.js и prebuilt platforms.
  • TLS завершается перед приложением; Alpine/musl не входит в текущую матрицу сборок.
  • trustedProxy включается только за ingress, который перезаписывает выбранный заголовок; X-Forwarded-For требует точного hops.
  • Низкоуровневый API не означает автоматически меньшую общую стоимость системы.

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

Контракты сверены с README и package metadata конкретных релизов.