TemplatedApp
Маршруты, listen, WebSocket behavior и pub/sub.
get()post()put()patch()del()options()head()connect()trace()any()ws()publish()numSubscribers()listen()listen_unix()filter()getHttpTransportStats()close()@swarmmachina/swm-uws v0.7.3
Нативный V8 binding
Нативный V8 binding, совместимый с обычной non-TLS HTTP/WebSocket поверхностью uWebSockets.js. Исходники uWebSockets.js 20.69.0 закреплены и vendored в репозитории.
Выбирайте swm-uws для прямого App() API, миграции обычного uWebSockets.js-приложения или когда серверные абстракции swm-core не нужны.
npm install @swarmmachina/swm-uwsimport uWS from '@swarmmachina/swm-uws'
const app = uWS.App()
app.get('/', (res) => {
res.writeHeader('content-type', 'application/json')
.end('{"ok":true}')
})
app.ws('/ws', {
message(ws, message, isBinary) {
ws.send(message, isBinary)
}
})
let listenSocket
app.listen(3000, (socket) => {
if (!socket) process.exit(1)
listenSocket = socket
})
process.on('SIGTERM', () => {
if (listenSocket) uWS.us_listen_socket_close(listenSocket)
app.close()
})| Среда | Статус | Примечание |
|---|---|---|
| Node.js 22 / 24 | Поддерживается | Prebuilds выпускаются для поддерживаемых ABI. |
| Linux x64 + glibc | Поддерживается | Portable generic x86-64 build. |
| Windows x64 | Поддерживается | Нативная сборка входит в пакет. |
| macOS arm64 / x64 | Поддерживается | Apple Silicon и Intel. |
| Linux ARM64 / Windows ARM64 | Не поддерживается | Нет текущих prebuilds. |
| Alpine / musl | Не поддерживается | Нужна glibc-среда. |
| TLS / permessage-deflate | Отключено | TLS завершается перед приложением. |
Маршруты, listen, WebSocket behavior и pub/sub.
get()post()put()patch()del()options()head()connect()trace()any()ws()publish()numSubscribers()listen()listen_unix()filter()getHttpTransportStats()close()Owned request values, выборочный header prefetch и потоковый ответ.
getMethod()getCaseSensitiveMethod()getUrl()getHeader()getQuery()getParameter()forEach()prefetch(plan)writeStatus()writeHeader()end()write()tryEnd()onWritable()onData()onDataV2()collectBody()pause()resume()onAborted()Сообщения, фрагменты, backpressure и темы.
send()sendFirstFragment()sendFragment()sendLastFragment()ping()publish()cork()end()close()getBufferedAmount()getRemoteAddress()getUserData()subscribe()unsubscribe()isSubscribed()getTopics()Типизация JavaScript callbacks, сведения о binding и управление listener.
defineHttpHandler()defineWebSocketBehavior()RequestPrefetchPlanversion()capabilities()us_listen_socket_close()Полные сигнатуры, типы и примеры находятся в README и TypeScript declarations исходного репозитория.
Binding близок к нативному uWS, поэтому время жизни wrapper-объектов и буферов является частью API-контракта.
Wrapper действителен только внутри route/upgrade callback. Отдельные get* методы возвращают owned JavaScript strings; для выбранных заголовков с duplicate/missing semantics вызовите req.prefetch() с заранее созданным RequestPrefetchPlan.
App({ http }) принимает лимиты заголовков, таймауты фаз и minimum body rate. getHttpTransportStats() отдаёт activeConnections и счётчики отказов без обхода соединений.
onData и onDataV2 получают zero-copy ArrayBuffer, который отсоединяется после callback. Скопируйте chunk, если он нужен позже.
res.pause() останавливает дальнейшее чтение сокета, но callbacks могут получить chunks, уже находившиеся в текущем parser buffer. Возобновляйте res.resume() только когда consumer готов читать дальше; иначе upload останется под backpressure.
collectBody(maxSize, callback) принимает лимит 0..1 ГиБ в байтах и возвращает принадлежащий приложению ArrayBuffer или null при превышении. Общий лимит памяти остаётся ответственностью приложения.
Response остаётся валиден после route callback только при регистрации onData, onDataV2, onWritable, collectBody или onAborted.
Response и WebSocket wrappers уже недействительны внутри onAborted и close callback соответственно.
Content-Length и Transfer-Encoding устанавливают response methods. Ручная запись этих заголовков отклоняется, чтобы исключить неоднозначное HTTP framing.
Исключение из callback возвращается в Node.js как исходная ошибка; текущая request/socket sequence останавливается, а затронутый wrapper инвалидируется.
Короткие ответы на вопросы о выборе пакета, runtime-контрактах и production-ограничениях.
swm-uws - экспериментальный non-TLS V8 binding для Node.js 22 и 24, совместимый с обычной поверхностью uWebSockets.js App(). Релиз 0.7.3 закрепляет uWebSockets.js 20.69.0, поставляет platform-specific prebuilds и не имеет runtime npm-зависимостей.
Да, для документированной non-TLS App() поверхности пакет можно установить alias-командой uwebsockets.js@npm:@swarmmachina/swm-uws. SSLApp, H3App, compression, SNI и экспериментальные upstream API не поддерживаются и требуют явной миграции.
Сам HttpRequest недействителен после route или upgrade callback, но строки из getMethod(), getUrl(), getQuery(), getHeader() и getParameter() принадлежат JavaScript и могут жить дольше. Для выбранных заголовков с сохранением duplicate/missing semantics создайте RequestPrefetchPlan и вызовите req.prefetch(plan) внутри callback.
Передайте App({ http: { ... } }) с maxHeaderSize, maxHeaderCount, headersTimeoutMs, keepAliveTimeoutMs, bodyIdleTimeoutMs, minBodyRateBytesPerSec и responseWriteTimeoutMs. Счётчики отказов и activeConnections доступны через app.getHttpTransportStats().
onData и onDataV2 передают zero-copy ArrayBuffer, который отсоединяется после callback. collectBody(maxSize, callback) возвращает принадлежащий приложению ArrayBuffer или null при превышении лимита до 1 ГиБ; общий бюджет памяти и admission control остаются ответственностью приложения.
res.pause() останавливает дальнейшее чтение сокета, когда consumer временно не готов к новым данным. Callback всё ещё может увидеть chunks из текущего parser buffer. Вызывайте res.resume() только после освобождения downstream-ёмкости: не вызванный resume больше не маскируется продолжением чтения и оставляет upload под backpressure.
Поддерживаются Node.js 22/24, Linux x64 с glibc, Windows x64 и macOS arm64/x64. TLS/SSLApp, H3App, permessage-deflate, SNI, Alpine/musl, Linux ARM64 и Windows ARM64 не поддерживаются; TLS завершается перед приложением.
Если приложение использует поддерживаемую обычную App() поверхность, пакет можно установить под исходным именем. Для SSLApp, H3App, compression, SNI и экспериментальных API нужна явная миграция.
npm install uwebsockets.js@npm:@swarmmachina/swm-uws// Исходный import остаётся без изменений
import uWS from 'uwebsockets.js'