consideri uno schema Cap'n'Proto come questo:stream durante la serializzazione con Cap'n'Proto
struct Document {
header @0 : Header;
records @1 :List(Record); // usually large number of records.
footer @2 :Footer;
}
struct Header { numberOfRecords : UInt32; /* some fields */ };
struct Footer { /* some fields */ };
struct Record {
type : UInt32;
desc : Text;
/* some more fields, relatively large in total */
}
Ora voglio serializzare (vale a dire build) un'istanza del documento e streaming a una destinazione remota.
Poiché il documento è in genere molto grande, non desidero completamente crearlo in memoria prima di inviarlo. Invece sto cercando un costruttore che invia direttamente struct by struct over the wire. Tale che il buffer di memoria aggiuntivo necessario è costante (cioè O (max (sizeof (Header), sizeof (Record), sizeof (Footer)).
Guardando il materiale tutorial non trovo un tale costruttore. il MallocMessageBuilder
sembra creare tutto in memoria prima (quindi si chiama writeMessageToFd
su di esso).
supporta l'API Cap'n'Proto ad un caso d'uso?
O è Cap'n'Proto più significava da utilizzare per i messaggi che si adattano alla memoria prima dell'invio?
In questo esempio, la struttura del documento potrebbe essere omessa e quindi attivata e potrebbe semplicemente inviare una sequenza di un messaggio Header, n Record e un Footer. Dal momento che un messaggio di Cap'n'Proto è auto-delimitante, questo dovrebbe funzionare. Ma perdi la radice del documento, forse a volte questa non è davvero un'opzione.