node 如何处理 google.protobuf.Any
这是 proto 文件
复制代码
使用 protobufjs,需要使用如下命令安装,
npm install protobufjs --save
下面的代码是一个 DEMO 程序
复制代码
版权声明: 本文为 InfoQ 作者【werbenhu】的原创文章。
原文链接:【http://xie.infoq.cn/article/89e8f9c4d3711a8be763394c0】。文章转载请联系作者。
本文字数:664 字
阅读完需:约 2 分钟
这是 proto 文件
syntax = "proto3";
import "google/protobuf/any.proto";
message MyMessage {
string name = 1;
google.protobuf.Any details = 2;
}
message Person {
string name = 1;
int32 age = 2;
}
message Address {
string city = 1;
string country = 2;
}
使用 protobufjs,需要使用如下命令安装,
npm install protobufjs --save
下面的代码是一个 DEMO 程序
const protobuf = require("protobufjs");
// 加载 .proto 文件
const root = protobuf.loadSync("example.proto");
// 获取消息类型
const MyMessage = root.lookupType("MyMessage");
const Person = root.lookupType("Person");
const Address = root.lookupType("Address");
// 创建一个 Person 消息
const person = Person.create({ name: "John", age: 30 });
// 序列化为二进制
const personBuffer = Person.encode(person).finish();
const Any = root.lookupType("google.protobuf.Any");
const anyPerson = Any.create({
type_url: "type.googleapis.com/Person", // 这个 URL 约定使用 package.name
value: personBuffer
});
// 创建一个 MyMessage 消息,并嵌入 Any 类型
const myMessage = MyMessage.create({
name: "Example",
details: anyPerson,
});
// 序列化 MyMessage
const buffer = MyMessage.encode(myMessage).finish();
console.log("Serialized buffer:", buffer);
// 反序列化 MyMessage
const decodedMessage = MyMessage.decode(buffer);
console.log("Decoded message:", decodedMessage);
版权声明: 本文为 InfoQ 作者【werbenhu】的原创文章。
原文链接:【http://xie.infoq.cn/article/89e8f9c4d3711a8be763394c0】。文章转载请联系作者。
还未添加个人签名 2018-01-08 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论