Zum Inhalt springen
Deutsch

CBOR-Serializer

CborSerializer kodiert Werte mit CBOR (RFC 8949) — einem kompakten binären Serialisierungsformat. Kompakter als JSON, schneller für binärlastige Daten, ähnliche API-Oberfläche.

import { CborSerializer } from 'actor-ts';
const serializer = new CborSerializer();
const bytes = serializer.toBinary({ kind: 'inc', n: 1 });
// → Uint8Array (binäres CBOR, kleiner als JSON)
const decoded = serializer.fromBinary(bytes, '');
// → { kind: 'inc', n: 1 }
Du solltest auf CBOR umstellen, wenn …
Nachrichten Binärdaten tragen (Bilder, kodierte Payloads).
Cluster-Bandbreite messbar / abgerechnet ist (Cross-Region, Mobilfunk-IoT).
Persistenz-Storage-Kosten mit der Payload-Größe skalieren.
Anhaltend Millionen kleiner Nachrichten, bei denen JSON-Parse-Kosten in Profilen auftauchen.

Für die meisten Apps ist JSON okay — CBORs Vorteile rechtfertigen den Verlust der Menschenlesbarkeit beim Debuggen nicht.

PayloadJSONCBORErsparnis
{ kind: 'inc' }14 Bytes9 Bytes36 %
Order mit 5 Items250 Bytes180 Bytes28 %
Bild-Bytes (10 KB)13,3 KB (base64)10 KB (nativ)25 %
Tief verschachteltes Objektvariiertvariierttypisch 20–40 %

Größere Ersparnisse bei Binärdaten (kein base64-Overhead) und wiederholten Feldnamen (CBOR kann auf Protokollebene string-tabellen).

TypJSONCBOR
Uint8Arraybase64-StringNative Bytes
MapVerloren (wird {})Native Map
BigIntWirftÜber Tag unterstützt
DateISO-StringNativ über Tag (Epoch)
Float-Präzision15–17 signifikante StellenVolles IEEE 754

Für Daten mit Binärfeldern oder Map / BigInt erhält CBOR die Typinformation.

import { SerializationExtensionId, CborSerializer } from 'actor-ts';
const ext = system.extension(SerializationExtensionId);
ext.setDefault(new CborSerializer());

Jetzt nutzen jedes Cross-Node-tell, jedes persistierte Event, jeder Durable-State-Write standardmäßig CBOR.

Per-Class-Bindung funktioniert weiterhin:

ext.bind(MyEvent, new ProtobufSerializer<MyEvent>());
// MyEvent nutzt Protobuf; alles andere nutzt CBOR
import { CborSerializer } from 'actor-ts';
const ser = new CborSerializer();
const bytes = ser.toBinary({ data: someUint8Array });
// Später:
const back = ser.fromBinary(bytes, '') as { data: Uint8Array };

Nützlich, wenn du CBOR für einen bestimmten Use-Case willst (z. B. HTTP-Response-Bodies für Binärdaten), ohne den Cluster- Default umzuschalten.

CBOR ist ein binäres getaggtes Format. Rohe Bytes zu inspizieren erfordert ein CBOR-fähiges Tool:

Terminal-Fenster
$ cat events.cbor | cbor-diag
# in diagnostische Notation dekodiert

Zum Debuggen willst du eventuell kurz auf JSON umschalten, um einen Bug zu jagen, und dann wieder zurück.

Die CBOR-Implementierung des Frameworks ist intern — pures JS, keine extra Abhängigkeiten. Konform zu RFC 8949.

Für externe Interoperabilität (CBOR an Nicht-actor-ts-Systeme senden) folgt die Kodierung des Frameworks dem Standard — jeder RFC-8949-konforme Decoder liest es.