ProtoBuf.js – Protocol Buffers的Javascript实现(转)

原文连接:ProtoBuf.js – Protocol Buffers的Javascript实现

推荐前端网址:http://keenwon.com/html

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

 

Protocol Buffers是Google公司开发的一种数据描述语言,相似于XML可以将结构化数据序列化,可用于数据存储、通讯协议等方面。它不依赖于语言和平台而且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但能够找到大量的几乎涵盖全部语言的第三方拓展包。node

 

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

 

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

 

再看一个protobuf文件:git

 

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

 

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

 

ProtoBuf.js

ProtoBuf.js是基于ByteBuffer.js的Protocol Buffers纯Javascript实现。主要功能是解析.proto 文件,构建message类,和简单的编码、解码。目前在一个node-webkit中使用protobuf格式于服务端进行数据交互(服务端是按照旧c++客户端要求实现的protobuf)。web

 

 

目前对ProtoBuf.js的使用主要就是读取旧的.proto 文件,建立message类,编码,发送给服务端,以下:编程

 

user.proto 文件:json

  1. package protobuf;
  2.  
  3. message UserModel {
  4. required string cyUserno = 1;
  5. required string cyPassWord = 2;
  6. required string cyStatus = 3;
  7. }

 

nodejs代码:编程语言

  1. var fs = require("fs"),
  2. ProtoBuf = require("protobufjs"),
  3. userProtoStr = fs.readFileSync('./user.proto').toString(),
  4. UserModel = ProtoBuf.loadProto(userProtoStr).build('protobuf').UserModel,
  5. userModel;
  6.  
  7. userModel= new UserModel();
  8. userModel.set('cyUserno', '111111');
  9. userModel.set('cyPassWord', '123456');
  10. userModel.set('cyStatus', '1');
  11.  
  12. var buffer = userModel.encode().toBuffer();

 

解码的方法也很简单:

 

  1. var userInfo = UserModel.decode(data);
  2.  
  3. userInfo.get('cyUserno');
  4. ......

 

另外protobuf.js还提供了一些工具,例如.proto 和.json 的转换等,具体参看他的官网:https://github.com/dcodeIO/ProtoBuf.js

 

- 完 -

相关文章
相关标签/搜索