noex ecosystem

noex-server

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.

Klíčové vlastnosti

Vše potřebné pro real-time WebSocket komunikaci v Node.js

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í.

Plný Store Proxy

Kompletní CRUD operace, reaktivní query subskripce s automatickými push aktualizacemi, kurzorová paginace, agregace a multi-bucket ACID transakce přes WebSocket.

Rules Engine Proxy

Emise událostí, správa faktů, wildcard pattern dotazy a real-time subskripce událostí — vše proxováno přes WebSocket spojení.

Autentizace a autorizace

Pluggable validace tokenů s per-connection sessions. Role-based kontrola oprávnění na každé operaci. Expirace sessions s automatickým vynucením.

Rate Limiting

Sliding window rate limiter s konfigurovatelným maximem požadavků a délkou okna. Per-user pro autentizované nebo per-IP pro anonymní spojení.

Heartbeat Ping/Pong

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.

Write-Buffer Backpressure

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.

Graceful Shutdown

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.

Protokol a zprávy

JSON přes WebSocket, protokol verze 1.0.0. Request-response s asynchronními push notifikacemi.

Typy zpráv

Client → Požadavek
{ "id": 1, "type": "store.get", "bucket": "users", "key": "abc" }
← Server Odpověď
{ "id": 1, "type": "result", "data": { "id": "abc", "name": "Alice" } }
← Server Push
{ "type": "push", "channel": "subscription", "subscriptionId": "sub_1", "data": [...] }
← Server Heartbeat
{ "type": "ping", "timestamp": 1706000000 }
store.insertstore.getstore.updatestore.deletestore.allstore.wherestore.findOnestore.countstore.firststore.laststore.paginatestore.clearstore.sumstore.avgstore.minstore.maxstore.subscribestore.unsubscribestore.transactionstore.bucketsstore.stats

Životní cyklus spojení

1
WebSocket připojení
2
Server pošle welcome zprávu s verzí protokolu
3
Klient se autentizuje (pokud je vyžadováno)
4
Klient posílá požadavky, server odpovídá
5
Server pushuje aktualizace subskripcí
6
Klient nebo server uzavře spojení

Supervision architektura

GenServer per spojení, supervisovaný strategií simple_one_for_one. Spadlá spojení jsou automaticky vyčištěna.

NoexServer
HTTP Server
ConnectionSupervisor
ConnectionRegistry
RateLimiter opt
ConnectionServer #1
ConnectionServer #2
ConnectionServer #N

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.

Podívejte se v akci

Reálné ukázky: spuštění serveru, klientský CRUD, reaktivní subskripce a transakce

server.ts
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}`);

Srovnání

noex-server vs populární real-time WebSocket řešení

Featurenoex-serverSocket.IOSupabase RealtimeFirebase RTDBAblyPusher
ProtokolJSON přes WSVlastní protokolPostgres CDCVlastní binárníVlastní protokolVlastní protokol
Izolace per spojeníGenServer aktor
Reaktivní dotazyConvex-style subskripceManuální roomsPostgres změnyRealtime syncPub/subChannels
ACID transakceMulti-bucket přes WSPostgres transakce
Vestavěný Rule Engine
Backpressure managementNa základě write bufferuServer-side
Heartbeat / Detekce mrtvých spojení
Supervision stromOTP simple_one_for_one
Self-hosted
AutentizacePluggable validace tokenůMiddlewareJWT / RLSFirebase AuthToken-basedToken-based
Graceful ShutdownNotifikace klientů + grace periodManagedManagedManagedManaged
StavAktivníAktivníAktivníAktivníAktivníAktivní

Čím je noex-server unikátní

GenServer per spojení

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í.

Integrovaná noex-store reaktivita

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.

Vestavěný Rule Engine Proxy

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.

Write-Buffer Backpressure

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.

ACID transakce přes WebSocket

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.

Začněte budovat real-time aplikace

Přidejte noex-server do svého projektu během vteřin

npm install @hamicek/noex-server
$ npm install @hamicek/noex-server

Podpořte projekt

Líbí se vám noex? Pomozte nám pokračovat ve vývoji

Bitcoin
Bitcoin QR Code