Высокопроизводительный HTTP- и WebSocket-сервер для Node.js поверх нативного транспорта swm-uws. Один экземпляр сервера может обслуживать оба протокола.
Выбирайте swm-core, если нужен готовый серверный слой: маршрутизация, контексты запросов, body limits, streaming, backpressure и корректное завершение работы.
Полные сигнатуры, типы и примеры находятся в README и TypeScript declarations исходного репозитория.
05
Body lifetime, лимиты и backpressure
swm-core намеренно оставляет стоимость и время жизни данных видимыми. Эти правила важны для корректного production-кода.
Lazy body до первого await
В режиме по умолчанию вызовите ctx.body(), buffer(), text() или json() до первой асинхронной операции. Иначе uWS-события body могут прийти до регистрации reader.
Prefetch для async auth
Включите prefetch глобально или для маршрута, если сначала нужно дождаться БД/авторизации, а затем читать body. Байты собираются заранее, JSON всё равно парсится лениво.
Ограничивайте совокупную память
maxBodySize ограничивает один запрос, maxBodyBudget - все одновременно собираемые body. Исчерпание бюджета даёт 503, превышение request limit - 413.
Проверяйте send status
WSContext.send() возвращает 1 при успехе, 0 при backpressure и 2, если сообщение отброшено из-за лимита.
Не удерживайте HttpContext
HttpContext переиспользуется между запросами. WSContext живёт всё соединение, но использовать его после onClose нельзя.
06
Когда брать низкоуровневый binding
swm-core подходит большинству сервисов. Переходите к swm-uws, если нужна прямая совместимость с обычным App() API uWebSockets.js и вы готовы сами управлять lifetime request/response объектов.
JavaScripttransport-choice.js
// Высокоуровневый серверimport Server from'@swarmmachina/swm-core'// Низкоуровневый bindingimport uWS from'@swarmmachina/swm-uws'