1)下载mac版本的protoc,不区分什么语言
地址: https://github.com/protocolbuffers/protobuf/releases
2)编写proto文件
技巧:可以在vscode中编写,这样可以简单的帮助排错
define.proto
syntax = "proto3";
enum ErrorCode {
DEFAULT = 0;
SUCCESS = 1;
FAIL = 2;
FROM_INVALID = 3;
}
test.proto
syntax = "proto3";
import "define.proto";
message host {
string ip = 1;
string mac = 2;
}
3)将proto文件利用编译工具生成js文件
/Users/ariesh/Desktop/test-proto/protoc-3.8.0-osx-x86_64/bin/protoc --proto_path=./../../protos/ --js_out=import_style=commonjs,binary:./../../msg/ ./../../protos/test.proto ./../../protos/define.proto
4)使用npm安装google-protobuf
npm init -f
cnpm i google-protobuf --save
5)使用
var test_pb = require("./msg/test_pb");
var hostObj = new test_pb.host();
hostObj.setIp("192.168.1.1");
hostObj.setMac("00-00-00-00");
var bytes = hostObj.serializeBinary();
console.log(bytes);
var decode_obj = test_pb.host.deserializeBinary(bytes);
console.log(decode_obj);
输出如下:
➜ test-proto node app.js
Uint8Array [
10,
11,
49,
57,
50,
46,
49,
54,
56,
46,
49,
46,
49,
18,
11,
48,
48,
45,
48,
48,
45,
48,
48,
45,
48,
48 ]
{ wrappers_: null,
messageId_: undefined,
arrayIndexOffset_: -1,
array: [ '192.168.1.1', '00-00-00-00' ],
pivot_: 1.7976931348623157e+308,
convertedPrimitiveFields_: {} }
注意一下array字段,可以看出来,只存放了数据,没有结构信息。所以压缩率很高
6)总体结构图
总结:可见,protobuf相对支持各种语言。 这样可以使用protobuf,而不用自己再编写bytebuf了