我正在使用protobufs在项目中的不同节点之间发送消息,为方便起见,我想为消息添加一些静态元数据。例如,对于消息中的每个字段,我想定义一个人类可读的名称(即“ Response Message”而不是“ resp_msg”),GUI在显示数据时可以用作标签。此信息无需序列化并通过电线传输。
我一直在寻找protobuf是否允许定义此元数据,并且有人指出我要使用自定义选项。在我看来,自定义选项在内部被实现为消息内部的附加数据。是这种情况,还是在实际使用这些protobuf时没有序列化的完全静态的元数据?即,如果我在邮件中添加选项,序列化邮件的结构是否会改变?
答案 0 :(得分:3)
,如果您是指.proto模式中的自定义选项 ;不,那些不构成有效载荷的一部分。它们可能可以在运行时进行检查-这在很大程度上取决于您使用的特定库和工具,但是:如果目标平台的工具嵌入了已编译的{{1} }元数据({.proto术语中的DescriptorProto
大致映射到DescriptorProto
)到生成的代码中,那么您确实可以使用API提取该数据-或更糟的情况是:将其反序列化为{ {1}}(在message
中定义)并手动将其读出。
但这不能保证。
所以:这取决于两者:
DescriptorProto
之类的功能,而不是扩展您的实际消息;如果您使用其他字段扩展实际消息,则 是消息有效负载的一部分,并且会增加消息大小