protobuf 测试使用
1 介绍
Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler.
2 Example:
2.1 定义proto文件
addrbook.proto
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
2.2 编译:
protoc.exe -I=./ --cpp_out=./ ./addrbook.proto
生成文件:addrbook.pb.cc addrbook.pb.h
2.3 使用
(依赖库:libprotoc.lib;libprotobuf.lib
2.3.1 序列化
Person person;
person.set_id(10);
person.set_name("protobuf");
person.set_email("test@gmail.com");
Person::PhoneNumber* phone_num1 = person.add_phone();
phone_num1->set_number("12345678");
phone_num1->set_type(Person_PhoneType::Person_PhoneType_MOBILE);
Person::PhoneNumber* phone_num2 = person.add_phone();
phone_num2->set_number("123456780");
std::string ouput;
size_t size = person.ByteSize();
person.SerializeToString(&ouput);
/* 使用string做需要的操作 */
2.3.2 反序列化
Person person;
person.ParseFromString(in);
std::string name = person.name();
int id = person.id();
std::string email = person.email();
int num = person.phone_size();
Person::PhoneNumber* phone = new Person::PhoneNumber[num];
for (size_t i = 0; i < num; ++i)
{
phone[i] = person.phone(i);
std::string phone_num = phone[i].number();
int type = phone[i].type();
}
3 Why not just use XML?
Protocol buffers have many advantages over XML for serializing structured data. Protocol buffers:
- are simpler
- are 3 to 10 times smaller
- are 20 to 100 times faster
- are less ambiguous
- generate data access classes that are easier to use programmatically
Json、XML、ProtoBuf特点比较
Json
- human readable/editable
- can be parsed without knowing schema in advance
- excellent browser support
- less verbose than XML
XML
- human readable/editable
- can be parsed without knowing schema in advance
- standard for SOAP etc
- good tooling support (xsd, xslt, sax, dom, etc)
- pretty verbose
Protobuf
- very dense data (small output)
- hard to robustly decode without knowing the schema (data format is internally ambiguous, and needs schema to clarify)
- very fast processing
- not intended for human eyes (dense binary)
All have good support on most platforms.
以上均为网上整理
另通过ICE和protobuf写了个简单的测试例子:http://pan.baidu.com/s/1i3oPfdN
protobuf 测试使用的更多相关文章
- linux protobuf 测试官方例子遇到报错及解决办法。
测试例子时出现报错如下,在最下面会写出安装流程. -------------------------------------报错----1------------------------------- ...
- Netty5 + Protobuf 使用
1. 安装开发环境 1.1 Netty环境 这里我使用Netty5.0.0版本 到这里下载即可http://netty.io/ 下载netty-all-5.0.0.Alpha2.jar 这个jar包简 ...
- 在centos 6.9下Protocol Buffers数据传输及存储协议的使用(python)
我们知道Protocol Buffers是Google定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据 ...
- Protobuf for Python测试保存和读取文件
安装pip, setuptools, and wheel 如果已经从python.org,安装啦Python 2 >=2.7.9 or Python 3 >=3.4 ,那么就已经有啦pip ...
- protobuf 安装 及 小测试
参考:http://shift-alt-ctrl.iteye.com/blog/2210885 版本: 2.5.0 百度云盘上有jar包. mac 上安装: 新建:/Users/zj/software ...
- protobuf简单测试应用
protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: 首先是.proto文件: package ...
- 测试Websocket建立通信,使用protobuf格式交换数据
接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...
- 如何用jmeter对websockt和protobuf进行压力测试
参考代码:https://github.com/hutao722/kekexinxin 这是基于Jmeter WebsocketSampler的插件,支持对基于websocket和protobuf的服 ...
- 如何用jmeter对websock和protobuf进行压力测试
1. 一个websocket插件官网地址 https://github.com/maciejzaleski/JMeter-WebSocketSampler 2. 可以用上述插件,也可以自己扩展,以实现 ...
随机推荐
- Vue.js学习笔记之修饰符详解
本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...
- django----过滤器和自定义标签
模板语法之过滤器 1.default:如果一个变量是false或者为空,使用给定的默认值.否则,使用变量的值.例如: <p>default过滤器:{{ li|default:"如 ...
- python----面向对象(2)
反射 class ClassA: name = 'xiaoming' def __init__(self): self.y = 'y' #先执行 __setattr__ 在执行__getattribu ...
- hdu5646数学构造+二分
/* 满足n>=(k+1)*k/2的整数n必定满足 a+(a+1)+...+(a+k-1)<=n<=(a+1)+(a+2)+...+(a+k) 只要在[a,a+k]中减掉一个数字ai ...
- python 全栈开发,Day67(Django简介)
昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...
- Javascript面向对象基础(二)
一: 用定义函数的方式定义类在面向对象的思想中,最核心的概念之一就是类.一个类表示了具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,即对象.在JavaScript中定义一个 ...
- LINQ学习之旅(三)
Linq to Sql语句之Join和Order By Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join ...
- Oracle GoldenGate常用配置端口
1 简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数 ...
- 解决mount.nfs: access denied by server while mounting错误
环境:oraclelinux6.7 以前在centos服务器上安装nfs.挂载NFS都没出现问题,今天在oraclelinux上安装后,在客户端mount的时候报mount.nfs: access d ...
- NDK 开发实例一(Android.mk环境配置下)
在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具, 用户只需在 新建项目的时候,添加选项(Include C++ support),Andr ...