我尝试了该示例,并且能够使一条消息起作用:
// awesome.proto
package awesomepackage;
syntax = "proto3";
message AwesomeMessage {
string awesome_field = 1; // becomes awesomeField
}
我对这个问题的回答中有一个完整的解决方案。
protobuf 是否能够让我们将多种消息类型写入文件并读回它们?(或通过网络,一条接一条的消息)。
而且我认为强大的是,我们可以“混合和匹配”消息类型?(意思可以是Message1,然后是Message2两三遍,完全可以是动态的?)
所以假设我们有
// awesome.proto
package awesomepackage;
syntax = "proto3";
message AwesomeMessage {
string awesome_field = 1; // becomes awesomeField
}
message AwesomeNameMessage {
string awesome_name = 1; // becomes awesomeName
}
我只是按照 protobufjs 网站中的示例,写入AwesomeMessage
一个文件,然后创建AwesomeNameMessage
并将其连接到同一个文件。
现在是否可以在不知道数据文件中有哪些消息类型的情况下read.js
写和读回消息?
我写的时候卡住了read.js
const AwesomeMessage = root.lookupType("awesomepackage.AwesomeMessage");
问题是,我不知道它是AwesomeMessage
or AwesomeNameMessage
,那么我们该如何进行呢?protobuf 可以按照上面的方式工作,还是我们需要定义所有消息类型(可能是 1000 个),然后将它们全部封装到一个消息类型中,例如GenericMessage
, 并以某种方式用于oneof
声明下一条消息可以是任何消息类型(或制作每条消息optional
)?它是如何工作的?