从Node.JS中的Web套接字接收google protobuff消息后对其进行解码

从Node.JS中的Web套接字接收google protobuff消息后对其进行解码,node.js,websocket,protocol-buffers,google-protocol-buffer,Node.js,Websocket,Protocol Buffers,Google Protocol Buffer,我正在听一个WebSocket,这个WebSocket返回用Base64二进制字节编码的数据,该字节由googleprotobuff编码。我似乎找不到使用Node.JS解码它的方法。接收到的数据示例: CLP5GBASK3RIBMIXBNVWZXb2DHLOMGO3EHQ1CZVSOTCWYTZ4YXJZCTZTNNB3BGE5EGGAFAOHQUXULTNCHD58I/HAiCA35glGhAKA0JOQhCKsa2iASDQwPot 编辑1: 这是我正在寻找的模式: message Acco

我正在听一个WebSocket,这个WebSocket返回用Base64二进制字节编码的数据,该字节由googleprotobuff编码。我似乎找不到使用Node.JS解码它的方法。接收到的数据示例:

CLP5GBASK3RIBMIXBNVWZXb2DHLOMGO3EHQ1CZVSOTCWYTZ4YXJZCTZTNNB3BGE5EGGAFAOHQUXULTNCHD58I/HAiCA35glGhAKA0JOQhCKsa2iASDQwPot

编辑1:

这是我正在寻找的模式:

message Account{
    int64 Height = 1;
    string owner = 2;
    repeated AssetBalance Balances = 3;
}

message AssetBalance{
    string Asset = 1;
    int64 Free = 2;
    int64 Frozen = 3;
    int64 Locked = 4;
}
我需要使用我假设的Account消息,因为AssetBalance在这里,因为它是Account内部的一种类型

编辑2:

固定的。下面的解决方案效果很好。不需要使用。尽管如此。我最终使用的JSON描述符是:

{
"nested": {
    "Account": {
        "fields": {
            "Height": {
                "type": "int64",
                "id": 1
            },
            "owner": {
                "type": "string",
                "id": 2
            },
            "Balances": {
                "repeated": true,
                "type": "AssetBalance",
                "id": 3
            }
        }
    },
    "AssetBalance": {
        "fields": {
            "Asset": {
                "type": "string",
                "id": 1
            },
            "Free": {
                "type": "int64",
                "id": 2
            },
            "Frozen": {
                "type": "int64",
                "id": 3
            },
            "Locked": {
                "type": "int64",
                "id": 4
            }
        }
    }
}
}试试这种方法:

var protobuf = require("protobufjs");
protobuf.parse.defaults.keepCase = true;
let root = protobuf.Root.fromJSON(JSON.parse("your json")
var message = root.lookupType("your type");
var buf = Buffer.from("CLP5gBASK3RibmIxbnVwZXB2dHloMGo3eHQ1czVsOTcwYTZ4YXJzcTZtNnB3bGE5eGgaFAoHQUxULTNCNhD58I/HAiCA35glGhAKA0JOQhCKsa2iASDQwPot","hex");
message.decode(buf).result;
更多详情:

示例:

尝试以下方法:

var protobuf = require("protobufjs");
protobuf.parse.defaults.keepCase = true;
let root = protobuf.Root.fromJSON(JSON.parse("your json")
var message = root.lookupType("your type");
var buf = Buffer.from("CLP5gBASK3RibmIxbnVwZXB2dHloMGo3eHQ1czVsOTcwYTZ4YXJzcTZtNnB3bGE5eGgaFAoHQUxULTNCNhD58I/HAiCA35glGhAKA0JOQhCKsa2iASDQwPot","hex");
message.decode(buf).result;
更多详情:


示例:

所以我知道我需要一个protobuff模式。模式在哪里?输入json还是类型?这个库需要的另一个变量是什么?谢谢您可以使用.json或.proto-json:
{“嵌套”:{“列表”:{“字段”:{“结果”:{“规则”:“重复”、“类型”:“项”、“id”:1}},“嵌套”:{“项”:{“字段”:{“id”:{“type”:“string”,“id”:1}}}
var message=root.lookupType(“List”);//如果需要数组
var message=root.lookupType(“Item”);//如果您需要一个对象
Proto:如果您不知道字段,请使用此链接:非常感谢您的帮助。因为我是新手,您介意帮我做最后一件我不完全理解的事情吗?我已经在原始消息中添加了我要找的方案。我需要做的是将其转换为与t兼容的jsonproto文件?然后lookuptype将是我假设的一项,因此我知道我需要Protobuff的模式。模式放在哪里?json还是类型?这个库需要的其他变量是什么?谢谢!您可以使用.json或.proto json:
{“嵌套”:{“列表”:{“字段”:{“结果”:{“规则”:“重复”,“类型”:“项”,“id”:1}},“嵌套”:{“项”:{“字段”:{“id”:{“类型”:“字符串”,“id”:1}}}}}
var message=root.lookupType(“列表”);//如果需要数组
var message=root.lookupType(“项”);//如果您需要一个对象
Proto:如果您不知道字段,请使用此链接:非常感谢您的帮助。因为我是新手,您介意帮我做最后一件我不完全理解的事情吗?我已经在原始消息中添加了我要找的方案。我需要做的是将其转换为与t兼容的json他是proto file?然后lookuptype将是我假设的一项