Sto scrivendo un wrapper di rete intorno a boost::asio
e mi chiedevo quale sia un modo semplice e buono per serializzare i miei messaggi. Ho una fabbrica di messaggi che può occuparsi di inviare i dati al costruttore corretto, ma voglio sapere se ci sono soluzioni stabilite per ottenere i dati binari dal lato del mittente e di conseguenza passare i dati per la deserializzazione sul lato ricevitore.
Alcune opzioni che ho esplorato sono: passare un puntatore a char[]
alle funzioni serialize / deserialize (per serializzare su cui scrivere e deserializzare per leggere da), ma è difficile imporre la dimensione del buffer in questo modo; Basandomi su questo, ho deciso di far restituire alla funzione serialize un boost::asio::mutable_buffer
, tuttavia la proprietà della memoria diventa sfocata tra più classi, poiché il wrapper di rete ha bisogno di ripulire la memoria allocata dal generatore di messaggi.
Ho visto anche soluzioni che coinvolgono streambuf
e stringstream
, ma manipolare i dati binari in termini di rappresentazione delle stringhe è qualcosa che voglio evitare. È possibile utilizzare una sorta di flusso binario? Quello che sto cercando è una soluzione (preferibilmente usando le librerie boost) che consente al costruttore di messaggi di dettare la quantità di memoria allocata durante la serializzazione e come apparire in termini di trasmissione dei dati tra il wrapper ei produttori di messaggi / fabbrica di messaggi.
PS. I messaggi contengono quasi esclusivamente tipi built-in e POD e formano una gerarchia superficiale ma ampia per il gusto di passare attraverso una fabbrica.
Nota: un collegamento ad esempi di utilizzo di boost::serialization
per qualcosa di simile sarebbe apprezzato visto che ho difficoltà a capire la relazione tra questo e i buffer.