在javascript中使用ProtoBuf.js解码Google协议缓冲区消息

Decoding a Google protocol buffer message in javascript using ProtoBuf.js

本文关键字:Google 解码 协议 缓冲区 消息 js ProtoBuf javascript      更新时间:2023-09-26

我正试图通过MQTT发送消息,利用javascript (ProtoBuf.js)中的google协议缓冲区

我能够使用以下代码对消息进行编码:

var ProtoBuf = dcodeIO.ProtoBuf;
var builder = ProtoBuf.loadProtoFile("./complex.proto"),
Game = builder.build("Game"),
Car = Game.Cars.Car;
var car = new Car({
"model" : "Rusty",
"vendor" : {
            "name" : "Iron Inc.",
           "address" : {
                "country" : "USa"
             }
          },
    "speed" : "FAST"
 });
 var buffer = car.encode();
console.log(buffer);
var messagegpb = buffer.toBuffer();
console.log(messagegpb ); //This prints "ArrayBuffer { byteLength: 29 }"

现在解码,当我尝试以下,它只是不做任何事情。我在浏览器中也没有看到任何日志。

var dec = builder.build("Game"); //nothing after this line gets executed
var msg = dec.decode(messagegpb);
console.log(msg);

这是我正在使用的.proto文件的链接。https://github.com/dcodeIO/ProtoBuf.js/blob/master/tests/complex.proto

谁能指出我哪里错了?

Thanks a ton

大概是这样的:

var dec = builder.build("Game");
var msg = dec.decode(messagegpb);

需要:

var Game = builder.build("Game");
var msg = Game.Cars.Car.decode(messagegpb);

也就是说,您需要指定要解码的类型。

可能你尝试调用dec.decode时抛出了一个异常,说decode方法不存在。您应该能够在错误控制台中看到这些异常,或者使用try/catch捕获它们。