Deno
actor-ts läuft auf Deno, aber mit Einschränkungen. Die Core-Actor-APIs (Actor, ActorSystem, ActorRef, Supervision usw.) funktionieren identisch. Subsysteme mit nativen Abhängigkeiten sind, wo die Unterstützung variiert.
Status: Best-Effort
Abschnitt betitelt „Status: Best-Effort“| Subsystem | Status |
|---|---|
| Core-Actor-API | ✓ Funktioniert |
| Cluster-Transport (TCP) | ✓ Funktioniert (via Deno.connect / Deno.listen) |
| Persistenz — In-Memory | ✓ |
| Persistenz — SQLite | ✗ Nicht unterstützt |
| Persistenz — Cassandra | ⚠ Ungetestet |
| HTTP — Fastify | ✓ Funktioniert |
| HTTP — Bun.serve | ✗ (Bun-only) |
WebSocket-Server (ServerWebSocketActor) | ⚠ Workaround nötig |
| Broker-Actor (Kafka, MQTT usw.) | ⚠ Hängt von der Deno-Kompat des zugrundeliegenden npm-Pakets ab |
Für Produktion empfehlen wir Bun oder Node, außer deine Organisation ist auf Deno festgelegt.
Installation
Abschnitt betitelt „Installation“curl -fsSL https://deno.land/install.sh | shdeno --version # 2.0+ benötigtactor-ts nutzen
Abschnitt betitelt „actor-ts nutzen“// deno.json{ "imports": { "actor-ts": "npm:actor-ts", "ts-pattern": "npm:ts-pattern" }}
// main.tsimport { ActorSystem } from 'actor-ts';
const system = ActorSystem.create('my-app');// ...Deno’s npm-Kompat lässt dich actor-ts direkt via npm:-
Specifier importieren.
Was Out-of-the-Box funktioniert
Abschnitt betitelt „Was Out-of-the-Box funktioniert“- Core-Actor-Modell — Actor, ActorSystem, Dispatcher, Mailboxen, Supervision.
- Cluster-Transport — Deno’s TCP-APIs sind verdrahtet.
- In-Memory-Persistenz — funktioniert für Tests + Dev.
- DistributedData — pure-JS, funktioniert.
- Event-Stream, Receptionist, Sharding, Singleton — alles funktioniert.
Was Workarounds braucht
Abschnitt betitelt „Was Workarounds braucht“Nicht unterstützt. Deno hat kein eingebautes SQLite, und weder
bun:sqlite noch better-sqlite3 funktionieren nativ.
Workarounds:
deno_sqlite(ein Deno-natives Paket) — implementiereJournalmanuell dagegen.- HTTP-gestütztes Journal — umhülle einen Remote-Journal- Service.
- Cassandra stattdessen nutzen — kein SQLite nötig für Multi-Node-Persistenz.
WebSocket-Server
Abschnitt betitelt „WebSocket-Server“ServerWebSocketActor setzt standardmäßig auf ws (Node) oder
Bun.serve. Für Deno schreibe einen dünnen Adapter mit
Deno.serveHttp + Deno.upgradeWebSocket.
Permissions-Modell
Abschnitt betitelt „Permissions-Modell“Deno’s Permission-System verlangt explizite Flags:
deno run \ --allow-net \ --allow-read \ --allow-write \ --allow-env \ main.tsFür die meisten actor-ts-Apps:
--allow-net— Cluster- + HTTP-Traffic.--allow-read— Config-Dateien, Zertifikate.--allow-write— für SQLite- / Datei-Persistenz (falls genutzt).--allow-env— für Env-Vars.
Für Produktion auf spezifische Berechtigungen einschränken:
deno run --allow-net=:2552,:8080 --allow-env=ACTOR_TS_* main.tsDeno Deploy
Abschnitt betitelt „Deno Deploy“Deno Deploy ist Deno’s edge-artige Serverless-Plattform. Kurzlebige Isolates, kein lang laufender Prozess — passt nicht zum Clustering.
Für Deno-Deploy-Use-Cases:
- Single-Actor-Muster — spawne einen Actor pro Request, dann stoppen.
- Nutze actor-ts als Bibliothek für Actor-Muster innerhalb eines HTTP-Handlers, nicht als Clustering-Primitiv.
Tests auf Deno
Abschnitt betitelt „Tests auf Deno“import { Deno } from 'deno';import { TestKit } from 'actor-ts/testkit';
Deno.test('Counter inkrementiert', async () => { const tk = TestKit.create(); // ... await tk.shutdown();});Deno’s eingebauter Test-Runner funktioniert mit TestKit.
Auf Deno migrieren
Abschnitt betitelt „Auf Deno migrieren“Wenn du erwägst, von Node / Bun auf Deno umzuziehen:
- Verifiziere, dass deine Peer-Deps auf Deno funktionieren —
die meisten NPM-Pakete sind via
npm:nutzbar, aber ein paar (besonders mit komplexen nativen Bindings) versagen. - Ersetze SQLite, falls du es nutzt — wechsle zu In-Memory (Tests) oder Cassandra (Produktion).
- Ersetze
ServerWebSocketActor, falls genutzt — schreibe einen Deno-Adapter oder nutze stattdessen SSE. - Teste Cluster-Formation gründlich — Deno’s TCP-Backend hat weniger Produktions-Stunden.
Wo es weitergeht
Abschnitt betitelt „Wo es weitergeht“- Runtime — Überblick — das größere Bild.
- Bun — die empfohlene Alternative.
- Node — die andere Alternative.
- Kompatibilitäts-Matrix — Feature-für-Feature-Unterstützung.