C++ 动态消息和TLV的数据序列化协议?

C++ 动态消息和TLV的数据序列化协议?,c++,networking,protocol-buffers,thrift-protocol,C++,Networking,Protocol Buffers,Thrift Protocol,是否有任何数据序列化协议允许对数据进行动态消息类型和TLV类型的编码 我有一些要求,例如:如果我想发送一些数据结构: 它必须有某种方式对数据进行编码(如类型长度值编码),以便接收方知道其读取内容和数据的排列方式(如数据树)。Protocl buffers表示您必须在接收方跟踪数据 它还应该提供一些方法,以便我可以动态添加数据。我认为在PB和thrift中,他们需要提前知道所有数据,对吗 唯一的替代方法是自己用TLV格式对数据结构进行编码,然后使用类似boost::serialization的方法

是否有任何数据序列化协议允许对数据进行
动态消息类型
TLV类型的编码

我有一些要求,例如:如果我想发送一些数据结构:

  • 它必须有某种方式对数据进行编码(如类型长度值编码),以便接收方知道其读取内容和数据的排列方式(如数据树)。Protocl buffers表示您必须在接收方跟踪数据

  • 它还应该提供一些方法,以便我可以动态添加数据。我认为在PB和thrift中,他们需要提前知道所有数据,对吗


  • 唯一的替代方法是自己用TLV格式对数据结构进行编码,然后使用类似boost::serialization的方法通过线路将其序列化?

    您是否尝试过类似JSON或二进制JSON这样更通用的方法?它没有指定perse的长度,但长度很容易被发现。也有很多C++库支持。如果你用一个<代码> DESCIRPURTSETS/CODE >捆绑你的消息,TopBuFs可以自我描述。请参阅文档。如果您真的需要,您甚至可以在运行时生成新的描述符(新的原型)


    这样说,听起来您对JSON或MSGPACK比较满意,这是没有模式的编码。

    看起来只有XML,键值组合是可能的,但是我需要考虑数据类型的长度,因为我使用一个Socket来传输这个数据,而接收方可能无法区分可变长度的数据类型。(字符串)。但是对于数据层次结构来说,它看起来很好。协议缓冲区似乎不是用来构建动态和自描述消息的。