JavaScript 使用 protobuf —— 支持 web 端交互使用 作者: Chuwen 时间: 2020-08-08 分类: JavaScript >转载自:https://bobjin.com/blog/view/54737b708031d8931158129c5c44a843.html # ProtoBuf 简介 Protocol Buffer的简称。Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式,适合用于数据存储,作为不同应用、语言之间相互通信的数据交换格式,序列化后的数据为二进制数据(pb格式的数据),类比XML、JSON。 protobuf最先支持C++ C# Go JAVA Python PHP语言,最近发布的代码包又支持了JavaScript,今天就来谈下,js怎么使用protobuf。 官网地址 https://developers.google.com/protocol-buffers/ # 安装protobuf编译器 从github上下载编译器源码安装包,https://github.com/protocolbuffers/protobuf/releases 编译安装, 目前仅支持unix类型的系统。 # 定义一个.proto文件 address.proto文件 ``` message Address { required string province = 1; required string city = 2; required string county = 3; } ``` # 编译生成访问类文件 运行下面的命令 ``` protoc --js_out=import_style=commonjs,binary:. address.proto ``` 会当前目录生成 ```address_pb.js``` 其中的 `--js_out` 的语法如下: ```--js_out=[OPTIONS:]output_dir``` 如上面的例子中的option为 import_style=commonjs,binary, "."为生成文件的目录,这里为当前目录 # 打包为web可用的js文件 > 前置条件:需要安装npm。npm一般在安装nodejs的时候就会自动安装。 安装库文件的引用库 `npm install -g require` 安装打包成前端使用的js文件 `npm install -g browserify` 安装protobuf的库文件 `npm install google-protobuf` 打包js文件export.js ``` var address = require('./address_pb'); module.exports = { DataProto: address } ``` 编译生成可用js文件 `browserify exports.js -o address_main.js` # API 普通类型字段(required/optional) get{FIELD}() // return field value set{FIELD}(value) // set field value to value clear{FIELD}(value) // clear filed value 数组类型字段操作(repeated) add{FIELD}(value) // add one value to field clear{FIELD}List() // clear filed get{FIELD}List() // return array of field values setInterestList(array)// set array 序列化/反序列化 serializeBinary() // 序列化 deserializeBinary(bin) // 反序列化(静态方法) 调试 toObject() // 打印数据 # 使用 ``` protobuf ``` 标签: none