js使用protobuf——支持web端交互使用

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
//打包js文件export.js
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() // 打印数据

使用

<html>  
    <head>  
        <script type="text/javascript" src="./js/person_main.js"></script> 
    </head>
    <body>
        protobuf
    </body>
        <script type="text/javascript">
            var address1 = new proto.Address();
            address1.setProvince("北京");
            address1.setCity("北京");
            address1.setCounty("海淀");
            console.log(address1.toObject());
        </script>
</html>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript使用 Protocol Buffers(protobuf)可以帮助您在不同应用程序之间高效地序列化和传输数据。下面是一些使用 protobuf 的基本步骤: 1. 定义消息结构:首先,您需要创建一个 .proto 文件来定义消息结构。在该文件中,您可以定义消息的字段、类型和其他属性。例如,下面是一个简单的示例: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } ``` 2. 生成代码:接下来,您需要使用 protobuf 编译器将 .proto 文件编译为适用于 JavaScript 的代码。可以使用 protobuf 库提供的 protoc 编译器或其他第三方库来完成这一步骤。编译后,您将获得一个包含生成的 JavaScript 代码的文件。 3. 使用生成的代码:一旦您生成了 JavaScript 代码,您可以在您的应用程序中使用它来序列化和反序列化消息。首先,您需要引入生成的代码文件。然后,您可以使用该文件中定义的类和方法来创建、设置和获取消息的字段值。 以下是一个示例,演示了如何在 JavaScript使用生成的 protobuf 代码: ```javascript // 引入生成的代码 const { Person } = require('./generated-code/person_pb'); // 创建一个新的 Person 消息 const person = new Person(); person.setName('John'); person.setAge(25); person.setHobbiesList(['reading', 'swimming']); // 序列化消息为字节 const bytes = person.serializeBinary(); // 反序列化字节为消息 const deserializedPerson = Person.deserializeBinary(bytes); // 获取消息的字段值 console.log(deserializedPerson.getName()); // 输出:John console.log(deserializedPerson.getAge()); // 输出:25 console.log(deserializedPerson.getHobbiesList()); // 输出:['reading', 'swimming'] ``` 这只是一个简单的示例,您可以根据您的需求扩展和自定义消息结构和操作。请注意,您需要先安装适用于 JavaScriptprotobuf 库,并按照其提供的说明进行设置和使用。 希望这些信息对您有所帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值