protobufs 中的选项会影响消息大小吗?

Do options in protobufs affect message sizes?

我正在使用 protobufs 在项目中的不同节点之间发送消息,为了方便起见,我想为我的消息添加一些静态元数据。例如,对于消息中的每个字段,我想定义一个人类可读的名称(即 "Response Message" 而不是 "resp_msg"),GUI 可以在显示数据时用作标签。此信息不需要序列化和通过网络传输。

我正在查看 protobufs 是否允许定义此元数据,我被指向使用自定义选项。在我看来,自定义选项在内部实现为消息中的附加数据。是这种情况,还是在实际使用这些 protobuf 时没有序列化的完全静态元数据?即,如果我向我的消息添加选项,我的序列化消息的结构会改变吗?

如果您指的是自定义选项 in the .proto schema;不,那些不构成有效载荷的一部分。它们 可能会也可能不会 在运行时进行检查 - 这在很大程度上取决于您使用的特定库和工具,但是:如果您的目标平台的工具嵌入了已编译的 DescriptorProto 元数据(DescriptorProto 粗略映射到 message in .proto terms)到生成的代码中,那么你确实可以使用 API 来提取数据——或者更糟case:反序列化成DescriptorProto(定义在descriptor.proto),手动读出

但不能保证这一点。

所以:这取决于两者:

  • 您使用的库、平台和工具
  • 您的自定义选项是否扩展了 DescriptorProto 之类的内容,还是扩展了您的实际消息;如果您要使用其他字段扩展实际消息,那么 是消息负载的 部分,并且会增加消息大小