javascript(js)使用protobuf

硅谷探秘者 算法基础 83 0 0

安装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) // 反序列化(静态方法)  

调试

  • toObject() // 打印数据 

代码中使用

<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。

猜你喜欢
算法基础 137 一、什么是protobuf?在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应无疑必须得直面这两点。解决流量过大的基本方法就是使高度压缩的通信协议,而数据压缩后流量减小带来的
分布式项目管理工具 410 git&github学习使笔记
linux系统 1161 linuxnohup命令使nohup是nohangup的简写,意为不挂断的意思。途:不挂断地运行命令语法:nohupCommand[Arg…][ &]描述:nohup命令运行由
前端(h5) 965 !DOCTYPEhtmlhtmlheadmetacharset="utf-8"metatitlelayui/titlemetaname="renderer"content="webkit"metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"metaname="viewport"content="width=device-width,i
java基础 2511 使wait和notify的条件wait()与notify/notifyAll方法必须在同步代码块中使,如果不是在同步方法或同步代码块中使则会报异常Exceptioninthread"main
框架 722 maven项目使tomcat7插件1.pom文件build finalNamedz/finalName plugins plugin
工具 632 上一篇:eclipse中使Git管理项目工程代码(3)将远程库的工程克隆到本地应情形1.员工a在master主分支上新建一个newBranch分支,然后开始在newBranch分支上开始编写代码
weblog 319 java使easypoi批量导入excel实体类:importcn.afterturn.easypoi.excel.annotation.Excel
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo
目录