Thrift: Est-il possible de ne faire que la sérialisation avec la bibliothèque C ++ Thrift?

Avec la bibliothèque C ++ Apache Thrift, est-il possible d’utiliser uniquement la sérialisation / désérialisation et de ne pas utiliser les services RPC?

Si je comprends bien à partir de cette page, il est possible de le faire avec la bibliothèque Java. Cependant, je n’ai pas pu trouver les classes similaires pour la bibliothèque C ++.

Oui c’est possible. Thrift manque de documentation sur ce sujet. Eh bien, à propos de quoi que ce soit vraiment.

Ici j’ai trouvé ceci:

http://mail-archives.apache.org/mod_mbox/thrift-user/201010.mbox/%[email protected]%3E

Personnellement, j’utilise boost :: serialization s’il n’y a pas besoin de transférer des données sur le réseau. Une syntaxe très claire et prend en charge les entrées / sorties JSON, XML et binarys.

En c ++, vous pouvez utiliser TFileTransport:

boost::shared_ptr transport(new TFileTransport(filename)); boost::shared_ptr protocol(new TBinaryProtocol(transport)); yourObj.write(protocol.get()); // to write 

ou

 yourObj.read(protocol.get()); // to read 

Si vous voulez simplement sérialiser en octets (sans avoir à écrire dans un fichier), vous pouvez utiliser TMemoryBuffer .

 boost::shared_ptr buffer(new TMemoryBuffer()); boost::shared_ptr binaryProtcol(new TBinaryProtocol(buffer)); obj->write(binaryProtcol.get()); obj->read((binaryProtcol.get())); 

Voici une publication de liste de diffusion différente avec du code joint montrant comment utiliser thrift pour sérialiser un fichier en C ++.

http://mail-archives.apache.org/mod_mbox/thrift-user/201203.mbox/%[email protected]%3E

Je me rends compte que cette question a été posée il y a un moment. J’ai récemment rencontré un cas d’utilisation similaire (avec une exigence supplémentaire: envoyer les octets sérialisés à un cluster Kafka). Voici ma réponse avec des extraits de code plus complets qui illustrent comment effectuer les tâches de sérialisation et d’envoi.