Documents the new DDP_TRANSPORT environment variable with available
transports (sockjs, uws), usage examples, and tradeoffs.
Updates DISABLE_SOCKJS to note it is equivalent to DDP_TRANSPORT=uws
and recommends the new variable instead.
Adds a dedicated CI workflow that runs ddp-server tests on both
sockjs and uws transports via a matrix strategy.
This is a lightweight job (~10 min) separate from the main test suite
to avoid doubling CI time. It ensures both transport backends pass
the full ddp-server test suite on every PR.
- Use const/let instead of var
- Use WeakMap instead of Map for socket listeners to prevent memory leaks
- Write 502 Bad Gateway response before destroying socket on proxy error
- Wire up idleTimeout setting in uWS config
Minimal fix: only _callStopCallbacks becomes async, _deactivate uses
.then() to clear _session and _documents after callbacks complete.
No async propagation up the call stack.
Addresses review feedback: avoid async/await snowball, use this instead
of self, keep changes contained to the subscription cleanup level.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove faye and ws transports as agreed with maintainer.
DISABLE_SOCKJS=1 now resolves to uws instead of faye.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Refactor the DDP transport layer into a pluggable architecture where
transports are isolated modules behind a common interface. This allows
benchmarking and comparing different WebSocket implementations on the
same build, same Node version, same machine.
Available transports (selectable via DDP_TRANSPORT env var or settings):
- sockjs: SockJS (current default, backward compatible)
- faye: faye-websocket (direct WebSocket, no SockJS overhead)
- ws: ws npm package (most popular Node.js WebSocket library)
- uws: uWebSockets.js (C++ high-performance transport)
Client-side: when transport != sockjs, SockJS is never loaded (dynamic
import), saving ~57 KB from the client bundle. Native WebSocket is used
instead.
Configuration:
- DDP_TRANSPORT=ws (env var)
- settings.packages['ddp-server'].transport = 'ws'
- DISABLE_SOCKJS=1 still works (resolves to 'faye')
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add documentation page for dupontbertrand:cluster, a Meteor 3
compatible fork of meteorhacks:cluster
- Add entry to community packages index under new Scaling / Clustering
category
- Add sidebar navigation entry
The CSS Modules setup was missing from the rspack documentation,
causing confusion for users trying to use .module.css files with
TypeScript projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>