protobuf v3测试

谷歌最近发布了v3版本的protobuf,以前的protobuf被称之为v2,二者之间的区别其特点见我上一篇blog《protobuf一些注意事项》

个人以为v3要比v2好处就在于:简洁,且二者的新版本都共同支持了新的数据类型:map。相比v2,它去掉了required等选项,只保留了repeated选项,还添加了时间等比较常用的数据类型(当然暂时还没有实现)等等。唯一的缺点就是,v3还没有发布beta版,目前的版本是protobuf-3.0.0-alpha-1。

为了测试v3对v2的兼容性,我写了一个程序,v2的协议内容如下:

syntax = "proto2";

package proto3_proto;

message Message 
{
  enum Humour {
    UNKNOWN = 0;
    PUNS = 1;
    SLAPSTICK = 2;
    BILL_BAILEY = 3;
  }

  optional string name = 1;
  optional Humour hilarity = 2;
  optional uint32 height_in_cm = 3;
  optional bytes data = 4;
  optional int64 result_count = 7;
  optional bool true_scotsman = 8;
  optional float score = 9;

  repeated uint64 key = 5 [packed = true];
  // repeated uint64 key = 5;
}

message MessageArray
{
   map<string, Message> msg_map = 1;
}

上面的协议内容基本上把protobuf各种数据类型都包括了,下面是对应的v3版本协议:

syntax = "proto3";

package proto3_proto;

message Message 
{
  enum Humour {
    UNKNOWN = 0;
    PUNS = 1;
    SLAPSTICK = 2;
    BILL_BAILEY = 3;
  }

  string name = 1;
  Humour hilarity = 2;
  uint32 height_in_cm = 3;
  bytes data = 4;
  int64 result_count = 7;
  bool true_scotsman = 8;
  float score = 9;

  repeated uint64 key = 5[packed = true];
}

message MessageArray
{
   map<string, Message> msg_map = 1;
}

v3的协议内容看着比v2清爽一些。 写了一个测试程序,其内容就不列出来了,我放在了百度网盘,感兴趣的自己去下载。只要是v3没有改变v2的部分,二者编码后的内容是一致的。

待v3的stable版本发布出来时候,它可能就开始支持时间等一些常用类型了,据说还可以把内容序列化为json格式,到时候再把更新本篇的内容。

时间: 2024-10-25 04:43:35

protobuf v3测试的相关文章

protobuf简单测试应用

protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: 首先是.proto文件: package desktop; syntax = "proto3"; message helloworld { required int32 id = 1; // id required string str = 2; // str optional int32 opt = 3; // optiona

Windows下编译protobuf v3.3.0

一:概述 关于 protobuf 在此不再多说,此处记录下成功编译步骤以备日后查阅.注意:本文并不是使用cmake gui进行编译的,如果熟悉cmake gui的话,也可以使用gui进行生成编译. 二:准备资源及工具 VS2013或以上版本,安装好 protobuf 源码,下载地址:官网:http://code.google.com/p/protobuf/git网:https://github.com/google/protobuf或git:https://github.com/google/p

ProtoBuf效率测试对比

打包 解包 包大小 耗时(1万次/毫秒) 包大小 耗时(1万次/毫秒) 序号 TX Proto TX Proto TX Proto TX Proto 1 6893 5843 259l 1328l 5805 4950 252l 1049l 2 6893 5843 259l 1329l 5805 4952 250l 1050l 3 5793 4943 230l 1141l 6905 5850 297l 1213l 4 5793 4943 229l 1143l 6917 5859 295l 1212l

VS下使用Google Protobuf完成SOCKET通信

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 出处:如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 最近一段时间,由于项目的需要,接触到了Protobuf这个东东,在Linux环境下,体验了一把,感觉挺不错,很方便,且高效.是一个非常值得学习掌握和应用的数据抽象.平台无关.功能强大.…(此处省略1000字)的开源工具. Google虽然把Protobuf做成了跨平台.跨语言,但作为微软的死对头,它在re

PowerShell 学习笔记5

可重用的远程管理会话: TCP Joke: ICM进行的会话在结束之后,会话在目标计算机上进行的会话就全部销毁了. 建立Session与查看Session $Session = New-PSSession –computerName dc Get-PSSession icm –session $sessions {$var =2} 这个$Session可以被重用(Powershell V3) 测试脚本执行时间: Measure-Command { scriptblock} 重用Session的脚

Spark-1.4.0单机部署(Hadoop-2.6.0采用伪分布式)【已测】

??目前手上只有一个机器,就先拿来练下手(事先服务器上没有安装软件)尝试一下Spark的单机部署. ??几个参数: ??JDK-1.7+ ??Hadoop-2.6.0(伪分布式): ??Scala-2.10.5: ??Spark-1.4.0: ??下面是具体的配置过程 安装JDK 1.7+ [下载网址]http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 环境变量设置(最好不要采用o

MySQL 5.6 VS 5.7压测报告

  MySQL 5.6 VS 5.7压测报告   版本 姓名 时间 V1.0 刘占彬 2016.3.2   测试条件 1.        软件 OS:  CentOS release 6.7 (Final) 文件格式:xfs MySQL:percona5.6.24  VS  5.7.10 关键参数配置(yum install后初始化默认,未做修改): bufferpool大小16G sync_binlog=0 innodb_flush_log_at_trx_commit= 2 压测工具:sysb

LVS中ipvsadm的使用方法及NAT类型集群实现

LVS中实现负载均衡调度的规则生成工具是ipvsadm,程序包就是ipvsadm. 安装: 在centos64位上安装ipvsadm: #yum install ipvsadm –y 安装后键入#rpm –ql ipvsadm  显示出如下信息 #/etc/rc.d/init.d/ipvsadm  服务脚本 #/etc/sysconfig/ipvsadm-config  保存规则的配置文件 #/sbin/ipvsadm  主程序 #/sbin/ipvsadm-restore  从文件中恢复规则并

手动实现一个单词统计MapReduce程序与过程原理分析

[toc] 手动实现一个单词统计MapReduce程序与过程原理分析 前言 我们知道,在搭建好hadoop环境后,可以运行wordcount程序来体验一下hadoop的功能,该程序在hadoop目录下的share/hadoop/mapreduce目录中,通过下面的命令: yarn jar $HADOOP_HOME/share/hadoop/mapreducehadoop-mapreduce-examples-2.6.4.jar wordcount inputPath outPath 即可对输入文