Protocol buffers 如何将一系列消息写入文件并使用protobuf(protobuf.js with proto3)将其读回?

Protocol buffers 如何将一系列消息写入文件并使用protobuf(protobuf.js with proto3)将其读回?,protocol-buffers,protobuf.js,Protocol Buffers,Protobuf.js,我尝试了这个例子,并且能够得到一条信息: //awesome.proto 包装包装; syntax=“proto3”; 消息令人敬畏的消息{ 字符串awesome\u field=1;//变为awesomeField } A protobuf是否允许我们将多种消息类型写入一个文件并将其读回?(或通过网络,一条接一条地发送消息) 我认为它的威力在于,我们可以“混合并匹配”信息类型?(这意味着它可以是Message1,然后是Message2两到三次,并且可以是完全动态的?) 那么,让我们假设我们有

我尝试了这个例子,并且能够得到一条信息:

//awesome.proto
包装包装;
syntax=“proto3”;
消息令人敬畏的消息{
字符串awesome\u field=1;//变为awesomeField
}
A

protobuf是否允许我们将多种消息类型写入一个文件并将其读回?(或通过网络,一条接一条地发送消息)

我认为它的威力在于,我们可以“混合并匹配”信息类型?(这意味着它可以是Message1,然后是Message2两到三次,并且可以是完全动态的?)

那么,让我们假设我们有

//awesome.proto
包装包装;
syntax=“proto3”;
消息令人敬畏的消息{
字符串awesome\u field=1;//变为awesomeField
}
消息AwesomeNameMessage{
字符串awesome\u name=1;//变为awesomeName
}
我只是按照protobufjs网站上的例子,将
AwesomeMessage
写入一个文件,然后创建
AwesomeNameMessage
并将其压缩到同一个文件中

现在是否可以编写
read.js
并读回消息,而不知道数据文件中有哪些消息类型?

当我写
read.js

const AwesomeMessage=root.lookupType(“awesomepackage.AwesomeMessage”);

问题是,我不知道它是
AwesomeMessage
还是
AwesomeNameMessage
,所以我们如何继续?protobuf是否可以按上述方式工作,或者我们是否需要定义所有消息类型(可能是1000种),然后将所有消息类型封装为一种消息类型,例如
GenericMessage
,并以某种方式使用
oneof
声明下一条消息可以是该消息类型中的任何一种(或者使每条消息
成为可选的
)? 它是如何工作的?

如果您控制protobuf协议规范,那么添加保存消息的类型可能是一个好主意

//awesome.proto
包装包装;
syntax=“proto3”;
消息列表{
重复抽象消息msgs=1;
}
消息摘要消息{
msgtype之一{
AwesomeMessage AwesomeMessage=2;
AwesomeNameMessage AwesomeNameMessage=3;
...
}
}
消息令人敬畏的消息{
字符串awesome\u field=1;//变为awesomeField
}
消息AwesomeNameMessage{
字符串awesome\u name=1;//变为awesomeName
}