2015-03-05 2 views
2

Как тема, я хочу использовать функции trift rpc, а с protobuf для сериализации, есть ли какой-нибудь проект, который это сделал? Причина, по которой я не хочу использовать сериализацию бережливости, - это после того, как я вижу в сгенерированных файлах cpp, я обнаружил, что у нее нет функций _in_place, что означает, что она должна копировать конструкцию каждого члена, в то время как для моего случая у меня есть все char * и т. д. alreadly выделяют else где.Могу ли я использовать trift rpc вместе с protobuf вместе

+0

Посмотрите на сгенерированный код и вы быстро увидим, что это миссия «невозможна», или, по крайней мере, миссия «звучит как большая работа, которую вы не хотите делать». Конечно, вы могли бы написать свой собственный транспорт Thrift, но тогда вам также придется переписать генератор кода, чтобы иметь сгенерированный код, который правильно обрабатывает объекты данных, отличных от Thrift. И, вероятно, некоторые другие части библиотеки. И убедитесь, что вы измеряете чистую прибыль от всех этих работ. – JensG

ответ

2

Единственный способ, которым вы можете это сделать, - объявить сообщение Thrift, содержащее большой байтовый блок, который вы, в свою очередь, разбираете как Protobuf. Но для этого потребуется дополнительная копия, которая побеждает вашу цель.

Обратите внимание, что Google только что выпустил GRPC, протокол RPC для Protobufs. Если вы начинаете новый проект и хотите использовать Protobuf RPC, используйте это.

Вы также можете быть заинтересованы в Cap'n Proto, сериализации и RPC-системе, которая специализируется на предотвращении копирования.

(Раскрытие информации: Я являюсь автором Cap'n Proto, а также большинство с открытым исходным кодом Protobuf кода Google, но я не имею ничего общего с КПГРАМИ.)

Смежные вопросы