Protocol buffers 如何使用Protobuf.js逐个显示每条消息?

Protocol buffers 如何使用Protobuf.js逐个显示每条消息?,protocol-buffers,protobufjs,Protocol Buffers,Protobufjs,基本上,如果我将5个编码的protobuf结果(合并到一个文件中),我可以返回2条消息,但我无法返回5条。使用encodeDelimited和decodeddelimited如何实现这一点?或者我必须使用GenericMessage的repeated将其编码为AllMessages,并将其编码和解码一次,就像一个数组一样。。。也就是说我不能看到结果 也就是说,如果我通过网络发送消息,它必须是一个接一个的,每个都是独立的消息,但不能批处理(或集中)在一起发送一次 详情: 我正在使用Node.js

基本上,如果我将5个编码的protobuf结果(合并到一个文件中),我可以返回2条消息,但我无法返回5条。使用
encodeDelimited
decodeddelimited
如何实现这一点?或者我必须使用
GenericMessage
repeated
将其编码为
AllMessages
,并将其编码和解码一次,就像一个数组一样。。。也就是说我不能看到结果

也就是说,如果我通过网络发送消息,它必须是一个接一个的,每个都是独立的消息,但不能批处理(或集中)在一起发送一次


详情:

我正在使用Node.js运行以下程序

//awesome-oneof.proto
包装包装;
syntax=“proto3”;
消息令人敬畏的消息{
int32num=1;
}
消息AwesomeNameMessage{
字符串名称=1;
}
消息通用消息{
味精之一{
awesomemessagenumbermessage=1;
AwesomeNameMessage nameMessage=2;
}
}
写它:

//write.js
常数fs=要求(“fs”);
const protobuf=require(“protobufjs”);
protobuf.load(“awesome oneof.proto”,函数(err,root){
如果(错误)抛出错误;
常量AwesomeMessage=root.lookupType(“awesomepackage.GenericMessage”);
//const payload={messageNumber:{a:150}};
常量有效载荷=[
{nameMessage:{name:“Peter”},
{numberMessage:{num:150}},
{nameMessage:{name:“Paul”},
{nameMessage:{name:“Mary”},
{numberMessage:{num:123}},
];
有效载荷。forEach((有效载荷)=>{
控制台日志(“有效载荷”,有效载荷);
const errMsg=AwesomeMessage.verify(有效负载);
if(errMsg)抛出错误(errMsg);
const message=AwesomeMessage.create(payload);//如果需要转换,则使用.fromObject
//将消息编码到UINT8阵列(浏览器)或缓冲区(节点)
const buffer=AwesomeMessage.encode(message.finish();
日志(缓冲区);
fs.writeFileSync(“awesomeoneof.dat”,buffer,{flag:“as”});
});
});
阅读:

//read.js
常数fs=要求(“fs”);
const protobuf=require(“protobufjs”);
protobuf.load(“awesome oneof.proto”,函数(err,root){
如果(错误)抛出错误;
常量AwesomeMessage=root.lookupType(“awesomepackage.GenericMessage”);
const buffer=fs.readFileSync(“awesome oneof.dat”);
日志(缓冲区);
让message=AwesomeMessage.decode(缓冲区);
让object=AwesomeMessage.toObject(消息{
长:字符串,
枚举:字符串,
字节:字符串,
});
console.log(“object”,object);
});
结果:


对象{numberMessage:{num:123},名称消息:{name:'Mary'}
所以我可以回复最新的2条信息,但无法回复5条