protobuf.js–protocolbuffers的javascript实现(转)

可爱的小熊      2022-02-11     399

关键词:

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

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

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

 

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

 

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

 

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

 

再看一个protobuf文件:

 

  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,这样只要数据发送方和接受方都按同一套“模板”解析数据,就可以大大缩短报文体积。

 

ProtoBuf.js

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

 

技术分享

 

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

 

user.proto 文件:

  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

 

- 完 -

javascript之protobuf在websocket中的使用

因为ProtoBuf的序列化效率和大小都非常好,所以它在网络通信上面应用越来越多;而webosocket也随着web3.0应用越来越广泛,而将这两个结合在一起的也会慢慢形成一种趋势;本人是为了测试自已写的一个C#websocket,所以在web上面结... 查看详情

javascript之protobuf在websocket中的使用

因为ProtoBuf的序列化效率和大小都非常好,所以它在网络通信上面应用越来越多;而webosocket也随着web3.0应用越来越广泛,而将这两个结合在一起的也会慢慢形成一种趋势;本人是为了测试自已写的一个C#websocket,所以在web上面结... 查看详情

在nodejs中玩转protocolbuffer

ProtocolBuffer入门教程ProtocolBuffer是个什么鬼NodeJS开发者为何要跟ProtocolBuffer打交道在NodeJS中实践ProtocolBuffer协议选择支持protobuf的NodeJS第三方模块一个栗子书写proto文件编译proto文件编写Writer编写Reader运行结果再举一个栗子编写proto... 查看详情

protocolbuffer序列化原理解析-为什么protocolbuffer性能这么好?

...习惯用Json、XML数据存储格式的你们,相信大多都没听过ProtocolBufferProtocolBuffer其实是Google出品的一种轻量&高效的结构化数据存储格式,性能比Json、XML真的强!太!多!由于Google出品,我相信ProtocolBuffer已经具备足够的吸引力... 查看详情

protocolbuffer相关

protocolbuffer简介    protocolbuffer全称GoogleProtocolBuffers,是google开发的一套用于数据存储,网络通信的协议编解码的工具库,与XML或者JSON相差不多,即把某种数据结构的信息,以某种格式(XML,JSON)保存起来,但是pro... 查看详情

protocolbuffers介绍

Protocolbuffers和mxl一样在序列化数据结构时很灵活、高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单。目前protocolbuffers支持C++、java和python三种语言并且独立于平台。linux环境安装下载protobuf-2.5.0.tar.gztar... 查看详情

protocolbuffer编码(代码片段)

protocolbuffer能够跨平台提供轻量的序列化和反序列化,得益于其平台无关的编码格式,本文就介绍下其中的编码格式。Varints在protocolbuffer中大量使用到了Varints的编码格式,这是一个可变长度的编码格式用于编码整形数字。Varint的... 查看详情

Thrift、Avro、Protocolbuffers - 他们都死了吗?

】Thrift、Avro、Protocolbuffers-他们都死了吗?【英文标题】:Thrift,Avro,Protocolbuffers-Aretheyalldead?【发布时间】:2017-04-1911:52:33【问题描述】:从事一个宠物项目(cassandra、spark、hadoop、kafka)我需要一个数据序列化框架。查看常见的... 查看详情

protocolbuffers简明教程(代码片段)

...分。在很多RPC的设计中,都采用了高性能的编解码技术,ProtocolBuffers就属于其中的佼佼者。ProtocolBuffers是Google开源的一个语言无关、平台无关的通信协议,其小巧、高效和友好的兼容性设计,使其被广泛使用。概述protobuf是什么... 查看详情

protocolbuffe

protocolbuffer(以下简称PB)是google的一种数据交换的格式,它独立于语言,独立于平台。google提供了多种语言的实现:java、c#、c++、go和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比... 查看详情

protocolbuffer原理学习笔记

一、Protocolbuffer简介ProtocolBuffer(简称PB)是google开源的序列化与反序列化的应用层协议。1)序列化:把文本转成二进制串2)反序列化:将二进制串恢复成文本二、PB的优缺点2.1、优点1、体积小序列化后可... 查看详情

关于 iPhone 上的 ProtocolBuffers

】关于iPhone上的ProtocolBuffers【英文标题】:AboutProtocolBuffersoniPhone【发布时间】:2011-04-1316:17:09【问题描述】:嗨,我是一名中国iOS工程师。我正在尝试在iphone上运行协议缓冲区,我从google代码下载了metasyntacticproject,并按照您的... 查看详情

互联网协议—protocolbuffers序列化协议(代码片段)

目录文章目录目录ProtocolBuffers序列化协议定义数据结构序列化传输ProtocolBuffers序列化协议ProtocolBuffers是一种高性能的、语言无关的数据格式序列化协议。与XML、JSON类似,并在一些高性能且对响应速度有要求的数据传输场景非常... 查看详情

protocolbuffer时间类型定义

ProtoBuf3中新增了TimeStamp类型,使用示例如下:syntax="proto3";importpublic"google/protobuf/timestamp.proto";messageMonitorData{google.protobuf.TimestampTime=1;//收集时间int64LongValue=2;//监控值--长整型stringMetaData=3;//监控元 查看详情

手把手教你如何安装protocolbuffer

...习惯用Json、XML数据存储格式的你们,相信大多都没听过ProtocolBufferProtocolBuffer其实是Google出品的一种轻量&高效的结构化数据存储格式,性能比Json、XML真的强!太!多!由于Google出品,我相信ProtocolBuffer已经具备足够的吸引力... 查看详情

「protocolbuffer」之pb在http协议中的应用(代码片段)

「ProtocolBuffer」系列教程1.「Protocol_Buffer」之基本使用与格式定义2.「ProtocolBuffer」之PB在HTTP协议中的应用客户端代码本例中分别演示了http+json的通信方式与http+ProtocolBuffer的通信方式;本例中的测试用例使用qtaf框架进行管理,实... 查看详情

protocolbuffers实践(代码片段)

...细的学习地址链接,如果需要进行深入学习点击这里简介ProtocolBuffers以下简称pb,是google开发的一个可以序列化反序列化object的数据交换格式,类似于xml,但是比xml更轻,更快,更简单。而且以上的重点突出一个跨平台,和xmljson 查看详情

protocolbuffers介绍(代码片段)

  什么是ProtocolBuffers?官方翻译:协议缓冲区是Google的语言中立,平台中立,可扩展的机制,用于序列化结构化数据-像XML,但更小,更快,更简单。您可以定义数据的结构化时间,然后可以使用特殊生成的源代码轻松地在各种... 查看详情