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
}