node.js 中使用 protobuf(proto3版本)

1)下载mac版本的protoc,不区分什么语言

地址: https://github.com/protocolbuffers/protobuf/releases

node.js 中使用 protobuf(proto3版本)_第1张图片

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)总体结构图

node.js 中使用 protobuf(proto3版本)_第2张图片

总结:可见,protobuf相对支持各种语言。 这样可以使用protobuf,而不用自己再编写bytebuf了

 

 

 

 

 

 

 

 

你可能感兴趣的:(node.js 中使用 protobuf(proto3版本))