【发布时间】:2021-12-28 18:17:10
【问题描述】:
得知 Protobuf 无法反序列化并将消息映射到它被序列化的类型时,我感到很失望:protobuf determining message type to deserialize
例如,当通过单个套接字连接发送消息时,我们可能希望根据消息类型路由消息。
有没有序列化方案可以做到这一点?
【问题讨论】:
-
您引用的答案是正确的,但您的推断不正确。您不能反序列化任意 protobuf 消息。那是对的。但是您可以对封装任意消息的已知标准消息类型的消息进行反序列化。见Any。我认为这条评论可能不会改变你的决定,但它确实提供了一种可能的方法。
-
偶然发现:Protocol Buffers self-describing messages
-
我所有的应用程序都将拥有 proto 文件的最新副本,但自描述消息技术仍然很有趣。
-
感谢您提供的信息。我发现
Any文档有点稀疏和深奥,所以如果我错了请纠正我,但我可以将整个 Protobuf 消息放在另一个通用 Protobuf 消息的Any字段中,称之为AppMessage,并且把那个送过去?由此引发了几个问题 - 1) 接收者能否分辨出具有相同字段的两条消息之间的区别?还是我需要为每个Any字段指定消息类型? 2)我是否需要一个长的 switch/case 语句来测试我期望收到的每一种消息(我认为 Protobuf 可以帮助我避免这种情况)? -
查看
Any的protobuf定义。该消息包含type_url和bytes。type_url用于提供对bytes消息类型的唯一引用。是的,无论您如何实现这一点,您都需要对所有传入消息类型的可能性进行模式匹配。
标签: serialization deserialization protocol-buffers