Decision record · server stack

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

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

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

4.1.1
swm-core
0.5.7
swm-uws
22 / 24
Node.js

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

Сравнение фиксирует @swarmmachina/swm-core 4.1.1 и @swarmmachina/swm-uws 0.5.7 для 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, async timeout, backpressure helpers и пулы контекстов.Ограничения и политика ресурсов принадлежат приложению.
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 не входит в текущую матрицу сборок.
  • Низкоуровневый API не означает автоматически меньшую общую стоимость системы.

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

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