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-core | swm-uws |
|---|---|---|
| Уровень | Готовый HTTP/WebSocket server layer. | Нативный V8 binding совместимой non-TLS поверхности uWebSockets.js. |
| HTTP | Routes, before hooks, контексты, body parsing, CORS и static helpers. | App.get/post/any и прямое владение request/response callback. |
| WebSocket | Upgrade contract, context, pub/sub, connectionKey и управляемое завершение. | App.ws behavior и низкоуровневые WebSocket callbacks. |
| Ресурсы | Body budgets, async timeout, backpressure helpers и пулы контекстов. | Ограничения и политика ресурсов принадлежат приложению. |
| Shutdown | shutdown(timeout) ждёт активную работу; close() завершает немедленно. | Команда сама координирует listen socket, запросы и соединения. |
| Стоимость владения | Больше готовых контрактов, меньше прикладной инфраструктуры. | Меньше абстракций, больше собственного lifecycle-кода и тестов. |
Выбор по задаче
- 01
Обычный production API или WebSocket gateway
Начинайте со swm-coreСерверные лимиты и завершение уже являются частью контракта.
- 02
Порт существующего uWebSockets.js приложения
Рассмотрите swm-uwsЕсть совместимый non-TLS API и npm alias для uwebsockets.js.
- 03
Нужен собственный framework layer
Стройте поверх swm-uwsТолько если команда явно принимает владение routing, safety, shutdown и regression tests.
Проверки перед выбором
- Оба пакета поддерживают только перечисленную матрицу Node.js и prebuilt platforms.
- TLS завершается перед приложением; Alpine/musl не входит в текущую матрицу сборок.
- Низкоуровневый API не означает автоматически меньшую общую стоимость системы.
Первичные источники
Контракты сверены с README и package metadata конкретных релизов.