当前位置 : 主页 > 大数据 > 区块链 >

protocol-buffers – Protobuf:嵌套任意类型的消息

来源:互联网 收集:自由互联 发布时间:2021-06-22
简而言之,有没有办法定义一个包含另一个任意类型的消息的protobuf消息?就像是: message OuterMsg { required int32 type = 1; required Message nestedMsg = 2; //Any sort of message can go here} 我怀疑有一种方法
简而言之,有没有办法定义一个包含另一个任意类型的消息的protobuf消息?就像是:

message OuterMsg {
    required int32 type = 1;
    required Message nestedMsg = 2; //Any sort of message can go here
}

我怀疑有一种方法可以做到这一点,因为在各种protobuf实现中,编译的消息从一个公共的Message基类扩展.

否则我想我必须为各种类型的消息创建一个公共基本消息,如下所示:

message BaseNestedMessage {
    extensions 1 to max;
}

然后呢

message OuterMessage {
    required int32 type = 1;
    required BaseNestedMessage nestedMsg = 2;
}

这是实现这一目标的唯一途径吗?

基本上不是直接的;协议缓冲区非常希望事先知道结构,并且消息的类型不包含在线路上.公共Message基类是用于提供常见管道代码的实现细节 – 协议缓冲区规范不包括继承.

因此,选择有限:

>每个消息类型使用不同的字段编号
>单独序列化消息,并将其作为字节类型包含,并传达“这是什么?”信息分开(大概是鉴别器/枚举)

我还应该注意,一些实现可能会为此提供更多支持; protobuf-net(C#/ .NET)支持(单独)继承和动态消息类型(即上面的内容),但主要仅用于从一个库到那个库.因为这是规范之外的所有内容(在线路格式方面保持100%有效),所以从其他实现中解释这些数据可能是不必要的混乱.

网友评论