k8w.io
Protobuf.js研究笔记
2017-11-20作者:k8w

Proto

最新的标准版本为Proto3,文档:
https://developers.google.com/protocol-buffers/docs/proto3

JS支持

有2套支持方案

官方:静态编译成JS

https://github.com/google/protobuf/tree/master/js
可在 https://github.com/google/protobuf/releases 下载 protoc-3.1.0-win32.zip
解压后 bin/protoc 即可使用。

编译

//类CommonJS的引用方式
protoc --js_out=import_style=commonjs,binary:. messages.proto base.proto

//适用于普通浏览器的引用方式 goog.require
protoc --js_out=library=myproto_libs,binary:. messages.proto base.proto

使用

var messages = require('./messages_pb');
var message = new messages.MyMessage();

message.setName("John Doe");
message.setAge(25);
message.setPhoneNumbers(["800-555-1212", "800-555-0000"]);

// Serializes to a UInt8Array.
bytes = message.serializeBinary();

var message2 = MyMessage.deserializeBinary(bytes);

民间:Protobuf.js(支持动态引用)

https://github.com/dcodeIO/protobuf.js

从Proto生成JS

npm install -g protobufjs
pbjs -t static test1.proto test2.proto > test_pb.js

动态引用

const MyMessage = require('./test_pb').MyMessage;
var msg = new MyMessage({
  name: 'XXX',
  age: 16
})
msg.setAge(17);

var bytes1 = msg.encode().finish();
var bytes2 = msg.encodeDelimited().finish(); //没有了length部分
(正文完)
留言(0条)
发表新留言
您的大名:
必填
电子邮箱:
不公开,仅用于向你发送回复
粤ICP备17160324号-3