mtwRequest
Eén Rust-runtime voor WebSocket, HTTP en AI-agents.
Stop met drie services aan elkaar plakken. Gedeelde verbinding, auth en state — in één core.
Drie services in één
De meeste stacks bouten een pub/sub-broker, een REST-framework en een agent-runtime aan elkaar — drie deploys, drie auth-oppervlakken, drie failure modes. mtwRequest klapt alle drie samen in één Rust-core.
- →NATS / Centrifugo voor pub/sub
- →Express / Fastify voor HTTP
- →Apart agent-framework voor AI
- →Drie deploys, drie auth-oppervlakken
- →Handgeschreven lijm voor state-sync
- ✓WebSocket + HTTP delen dezelfde verbinding
- ✓AI-agents zijn first-class modules
- ✓Eén auth, één state, één tracing
- ✓Module-marketplace voor compositie
- ✓Apache-2.0 — fork het, ship het
Head-to-head benchmarks
Same-host, Docker 2 CPU / 2 GB per concurrent, payload 128 B, HdrHistogram 3 significante cijfers.
Reproduceerbare runner in bench-suite/.
| Scenario | mtwRequest | vs leiders |
|---|---|---|
| 🥈 Fanout 100 subs · p50 | 17.53 ms | gelijk met NATS (16.97 ms) |
| 🥇 Fanout 1000 subs · p50 | 197.53 ms | 1.5× sneller dan NATS (299.63 ms) |
| 🥇 Fanout 1000 subs · p99 | 367.79 ms | beter dan NATS (554.70 ms) |
| 🥈 Echo RTT · p50 | 62.2 µs | gelijk met NATS (Δ 3.8 µs) |
| 🥇 Connect storm · rate | 50.9 k conn/s | 2.7× meer dan NATS |
mtwRequest scoort 🥇 of 🥈 op elke latency-metric — én bundelt HTTP, AI-agents, auth, trading en MCP in dezelfde core.
NATS leidt nog op ruwe broadcast-throughput op fanout-1000: 2.66 G/s tegenover 506 M/s bij mtwRequest (5.2× meer). Dat is een structureel plafond van TCP-zonder-WebSocket — een bewuste trade-off om het protocol browser-compatibel te houden. Als uw hot path alleen server-to-server is, is NATS de juiste keuze.
Grafieken van de laatste run
Distributies over mtw, nats, centrifugo en socketio. Gegenereerd door de bench-suite — hetzelfde artefact als u lokaal zou krijgen.
Fanout-latency
1 publisher → N subscribers · 100 en 1000 subs · payload 128 B
Echo round-trip
Requester → echo bot → requester · 2.000 round-trips
Connect storm
500 gelijktijdige verbindingen · per-connect latency + rate
Draai bench-suite/run.sh in de repo om het op uw eigen host te reproduceren.
Wat zit er in de core
Geen aan elkaar genaaide broker. Eén runtime met batterijen inbegrepen.
Eén runtime, geen drie
pub/sub + REST + AI-agents delen verbinding, auth en state. Geen NATS + Express + apart agent-framework meer aan elkaar plakken.
Duaal wire format
JSON standaard voor interop. MsgPack opt-in via subprotocol mtw.msgpack.v1 — p99-distributie 4.7× strakker, ~50% minder bytes.
Composable modules
Een MtwModule-trait met lifecycle hooks, geprioriteerde middleware, glob-matched pub/sub-kanalen en geschiedenis. Te installeren via de marketplace.
Observability inbegrepen
Structured tracing, healthchecks per module, HdrHistogram-metrics in de bench-suite. Productiebedrading zit in de core.
Multi-language bindings
Native bindings voor Node.js, Python en PHP. Browser via WebAssembly. Hetzelfde wire-protocol over elke client.
Glob pub/sub + history
Abonneer met patronen zoals orders.eu.*. Kanalen dragen herspeelbare geschiedenis; nieuwe abonnees kunnen bijhalen.
Twee zichten op dezelfde runtime
Abonneer vanuit een browser. Stel een server-side module samen. Zelfde verbinding, zelfde auth.
const ws = new WebSocket('wss://api.example.com/mtw', 'mtw.msgpack.v1'); ws.onopen = () => { ws.send(JSON.stringify({ "type": "subscribe", "channel": "orders.eu.*" })); }; ws.onmessage = (msg) => { const evt = JSON.parse(msg.data); console.log('event', evt.channel, evt.payload); };
use mtw_request::{MtwModule, Context, Result}; pub struct PriceFeed; #[async_trait] impl MtwModule for PriceFeed { fn name(&self) -> &str { "price-feed" } async fn on_start(&self, ctx: &Context) -> Result<()> { ctx.subscribe("ticker.*").await?; Ok(()) } async fn on_message(&self, ctx: &Context, m: Message) -> Result<()> { ctx.publish("alerts", m.payload).await } }
Bindings voor elke client
Hetzelfde wire-protocol. Zelfde auth. Andere taal aan de rand.
Node.js
BeschikbaarPython
BeschikbaarPHP
BeschikbaarBrowser (WASM)
RoadmapWanneer mtwRequest, wanneer niet
Eerlijke defaults. Kies de juiste tool voor uw hot path.
Kies mtwRequest als…
- • U WebSocket + HTTP + AI-agents in één runtime nodig hebt
- • Tail-latency op browser-fanout uw SLA is
- • U module-compositie wilt, geen bevroren broker
- • U auth, MCP en trading in dezelfde core wilt (in roadmap / shipped)
Kies NATS als…
- • Uw hot path server-to-server TCP is, geen browsers
- • U 1 G/s+ ruwe broadcast-throughput nodig hebt
- • U al een JetStream-cluster draait waar u op vertrouwt
- • U geen HTTP of AI-agents in hetzelfde proces nodig hebt
Gebouwd op
Saaie fundamenten. Voorspelbaar gedrag.
Veelgestelde vragen
Hoe verschilt mtwRequest van NATS of Centrifugo?
Zijn de benchmarks reproduceerbaar?
JSON of MsgPack — wat moet ik gebruiken?
Welke taalbindings zijn beschikbaar?
Is er een module-marketplace?
Licentie en support?
Reproduceer de bench, fork de core
Apache-2.0. De runner staat in de repo. Voor productiehulp, boek een consult.