ActionScript
TypeScript
JavaScript

protocolbuffer二进制数据传输

发布时间:2017-01-12

Protocol Buffers介绍

在Javascript里比较常见的数据格式就是json,xml,但是这两种格式在数据传输方面有明显不足。而Protocol Buffers可以很好的解决这个问题,下面引用百科的对Protocol Buffers的定义:

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。



同为数据的存储格式,和json相比,Protocol Buffers的优点主要体现在性能和体积上,性能方面需要实际的测试,暂且不说,数据体积方面的优势是比较明显的,例如,一个json文件:

[
    {"Name": "zhangsan", "Gender": 0, "Age": 18},
    {"Name": "lisi", "Gender": 1, "Age": 19}
]

再看一个protobuf文件:

message Person {
    required string Name = 1;
    optional int32 Gender = 2;
    optional int32 Age = 3;
}

json文件的问题在于无效数据太多,例如Name 和Gender 等,这些内容大量重复出现,使得数据体积较大。再看protobuf文件,它使用一个唯一的id(数字)来代替json里复杂的key,这样只要数据发送方和接受方都按同一套“模板”解析数据,就可以大大缩短报文体积。


Protocol Buffers应用

下面我们来看下怎么在LayaAir引擎中使用这个协议。

首先从Protobuf官网下载protobuf.js,有开发版本和正式版本,开发中直接用开发版本就可以,正式上线,替换成压缩版本。在新建一个test.proto文件,也可以从官网下载,文件内容如下:

blob.png

打开LayaAirIDE,新建一个空项目。编译运行下生成了index.html文件。然后打开index.html文件,如图添加js文件。

blob.png

下面开始进行主类的封装。首先我们要获取Protocol的引用。刚才我们把protobuf.js已经添加到了页面,因此我们声明一个变量protobuf,具体的逻辑代码如下:

blob.png

private var protobuf:Object =Browser.window.protobuf;这句意思是获取protobuf的引用。

protobuf.load("test.proto",onload);//加载协议文件;

onload函数是回调,加载成功则root才可以用。