javascript(js)使用protobuf

硅谷探秘者 算法基础 1117 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。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
算法基础 1202 一、什么是protobuf?在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应无疑必须得直面这两点。解决流量过大的基本方法就是使高度压缩的通信协议,而数据压缩后流量减小带来的
分布式项目管理工具 1220 git&github学习使笔记
linux系统 2256 linuxnohup命令使nohup是nohangup的简写,意为不挂断的意思。途:不挂断地运行命令语法:nohupCommand[Arg…][ &]描述:nohup命令运行由
前端(h5) 1759 !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基础 3380 使wait和notify的条件wait()与notify/notifyAll方法必须在同步代码块中使,如果不是在同步方法或同步代码块中使则会报异常Exceptioninthread"main
框架 1643 maven项目使tomcat7插件1.pom文件build finalNamedz/finalName plugins plugin
工具 1559 上一篇:eclipse中使Git管理项目工程代码(3)将远程库的工程克隆到本地应情形1.员工a在master主分支上新建一个newBranch分支,然后开始在newBranch分支上开始编写代码
weblog 1106 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 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。