安装proto编译器
参考:http://www.jiajiajia.club/blog/artical/351psy9r6l0g/464
编写.proto文件
syntax = "proto3";
message DogInfo{
string name = 1;
int32 age = 2;
}
编译生成访问类文件:
命令:protoc --js_out=import_style=commonjs,binary:. Dog.proto
![]()
当前目录会生成Dog_pb.js
打包为web可用的js文件
前置条件:需要安装npm。npm一般在安装nodejs的时候就会自动安装。
安装库文件的引用库
npm install -g require
安装打包成前端使用的js文件
npm install -g browserify
安装protobuf的库文件
npm install google-protobuf
编写打包js文件dog_export.js
var dog = require('./Dog_pb');
module.exports = {
DataProto: dog
}
![]()
执行完安装命令后会自动生成node_modules文件夹和package-lock.json文件。
编译生成可直接使用的js文件
命令:browserify dog_export.js -o dog_main.js
![]()
文件夹中产生一个可直接使用的dog_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) // 反序列化(静态方法)
调试
代码中使用
<html>
<head>
<script type="text/javascript" src="./dog_main.js"></script>
</head>
<body>
protobuf for js
</body>
<script type="text/javascript">
var dog = new proto.DogInfo();
dog.setName("京巴");
dog.setAge(12);
console.log(dog.toObject());
</script>
</html>
注意创建对象的时候是DogInfo,不是Dog,因为我们在proto文件中定义的message的name是DogInfo。
![]()