GenServer per spojení
Každé WebSocket spojení běží ve vlastním GenServer aktoru, supervisovaném strategií simple_one_for_one. Pokud jedno spojení spadne, ostatní pokračují bez přerušení.
Real-time WebSocket Server
JSON protokol přes WebSocket s GenServer izolací per spojení, reaktivními store subskripcemi, proxy pro rules engine, pluggable autentizací a vestavěným backpressure managementem.
Vše potřebné pro real-time WebSocket komunikaci v Node.js
Každé WebSocket spojení běží ve vlastním GenServer aktoru, supervisovaném strategií simple_one_for_one. Pokud jedno spojení spadne, ostatní pokračují bez přerušení.
Kompletní CRUD operace, reaktivní query subskripce s automatickými push aktualizacemi, kurzorová paginace, agregace a multi-bucket ACID transakce přes WebSocket.
Emise událostí, správa faktů, wildcard pattern dotazy a real-time subskripce událostí — vše proxováno přes WebSocket spojení.
Pluggable validace tokenů s per-connection sessions. Role-based kontrola oprávnění na každé operaci. Expirace sessions s automatickým vynucením.
Sliding window rate limiter s konfigurovatelným maximem požadavků a délkou okna. Per-user pro autentizované nebo per-IP pro anonymní spojení.
Automatická detekce mrtvých spojení s konfigurovatelnými intervaly (výchozí 30s) a timeoutem (výchozí 10s). Spojení uzavřeno kódem 4001 při timeoutu.
Ochrana před pomalými klienty. Když write buffer WebSocket překročí high water mark (výchozí 80% z 1 MB), push zprávy jsou zahazovány pro prevenci vyčerpání paměti.
Klienti obdrží systémovou notifikaci o vypnutí s grace periodem. Nová spojení jsou odmítána, zatímco existující klienti mají čas se čistě odpojit.
JSON přes WebSocket, protokol verze 1.0.0. Request-response s asynchronními push notifikacemi.
GenServer per spojení, supervisovaný strategií simple_one_for_one. Spadlá spojení jsou automaticky vyčištěna.
Každé WebSocket spojení běží ve vlastním GenServeru — plná izolace procesů, sekvenční zpracování zpráv, nezávislý stav subskripcí a session.
Request pipeline: JSON parse → Auth kontrola → Rate limit → Směrování na store/rules/auth proxy → Serializace odpovědi. Push zprávy tečou ze store/rules subskripcí přes connection GenServer.
Reálné ukázky: spuštění serveru, klientský CRUD, reaktivní subskripce a transakce
import { NoexServer } from '@hamicek/noex-server';
import { Store } from '@hamicek/noex-store';
import { RuleEngine } from '@hamicek/noex-rules';
const store = await Store.start();
await store.defineBucket('users', {
key: 'id',
schema: {
id: { type: 'string', generated: 'uuid' },
name: { type: 'string', required: true },
},
});
const rules = await RuleEngine.start();
const server = await NoexServer.start({
store,
rules,
port: 8080,
auth: {
validate: async (token) => {
// Return session or null
return { userId: 'user_1', roles: ['admin'] };
},
},
heartbeat: { intervalMs: 30_000, timeoutMs: 10_000 },
backpressure: { maxBufferedBytes: 1_048_576, highWaterMark: 0.8 },
});
console.log(`Server listening on port ${server.port}`);noex-server vs populární real-time WebSocket řešení
| Feature | noex-server | Socket.IO | Supabase Realtime | Firebase RTDB | Ably | Pusher |
|---|---|---|---|---|---|---|
| Protokol | JSON přes WS | Vlastní protokol | Postgres CDC | Vlastní binární | Vlastní protokol | Vlastní protokol |
| Izolace per spojení | GenServer aktor | — | — | — | — | — |
| Reaktivní dotazy | Convex-style subskripce | Manuální rooms | Postgres změny | Realtime sync | Pub/sub | Channels |
| ACID transakce | Multi-bucket přes WS | — | Postgres transakce | — | — | — |
| Vestavěný Rule Engine | ✓ | — | — | — | — | — |
| Backpressure management | Na základě write bufferu | — | — | — | Server-side | — |
| Heartbeat / Detekce mrtvých spojení | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Supervision strom | OTP simple_one_for_one | — | — | — | — | — |
| Self-hosted | ✓ | ✓ | — | — | — | — |
| Autentizace | Pluggable validace tokenů | Middleware | JWT / RLS | Firebase Auth | Token-based | Token-based |
| Graceful Shutdown | Notifikace klientů + grace period | — | Managed | Managed | Managed | Managed |
| Stav | Aktivní | Aktivní | Aktivní | Aktivní | Aktivní | Aktivní |
Každé WebSocket spojení je supervisovaný GenServer aktor. Sekvenční zpracování zpráv eliminuje race conditions a izolace pádů zabraňuje ovlivnění ostatních spojení.
Convex-style reaktivní query subskripce jsou proxovány přímo přes WebSocket. Klienti automaticky dostávají push aktualizace při změně podkladových dat.
Jediný WebSocket server s integrovaným přístupem k rule enginu. Emitujte události, spravujte fakta a odebírejte pattern-matched rule eventy v reálném čase.
Chrání před pomalými klienty monitorováním write bufferu WebSocket. Když buffer překročí high water mark, push zprávy jsou bezpečně zahazovány pro prevenci vyčerpání paměti.
Multi-bucket atomické transakce s optimistickým zamykáním, odeslané jako jediná WebSocket zpráva. Read-your-own-writes a automatický rollback při konfliktu.
Přidejte noex-server do svého projektu během vteřin
$ npm install @hamicek/noex-server Líbí se vám noex? Pomozte nám pokračovat ve vývoji