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部分
(正文完)