您的位置:首页 > 编程语言 > C语言/C++

protobuf使用方法(c++为例)

2014-01-29 20:35 756 查看
protobuf使用方法(c++为例)

1. 定义数据结构;

2. 实现数据结构与byte的相互转换;

首先解释下为何一个数据结构要平白无故的转换成byte:

因为网络上传输的都是二进制,所以要实现数据结构和byte的相互转换;

一般流程是:

发送方:数据结构->byte 将byte发送;

接收方:接收byte,转换:byte->数据结构

下面以实例进行解释:

1.定义数据结构

message EchoRequest {
required string user = 1;
required string message = 2;
}

message EchoResponse {
required int ret = 1;
required string data = 2;
}


文件保存为echo.proto,然后运行

protoc -I=. --cpp_out=. echo.proto

生成echo.pb.h和echo.pb.cc

至此,第一步完成啦O(∩_∩)O

2. 实现数据结构与byte的相互转换;

很简单,就3步:

1.赋值;

2.转成byte;

3.将byte转回数据结构;

#include <iostream>

//刚才生成的.h
#include "echo.pb.h"

int main(){
//赋值
EchoRequest input;
input.set_user("user123");
input.set_message("456");

//转换成字节,其类型是std::string,这是google定的接口 直接用
std::string bytes;
input.SerializeToString(&bytes);

EchoRequest output;
//将byte转换回来
output.ParseFromString(bytes);

//验证结果
std::cout<<output.user()<<" "<<output.message()<<std::endl;
return 0;
}


编译:

g++ -o 1_res test.cpp echo.pb.cc -I. -I./protobuf/include/ -L ./protobuf/lib -lprotobuf

执行./1_res输出结果:

user123 456

至此,你就学会了如何使用protobuf。比较牛的是,定义数据结构支持嵌套。即数据结构里还可以有数据结构。

总结

细心的话你会发现,用protobuf完全不用自己定网络协议了! 正是如此!

protobuf做的不止这些,他连rpc的框架都实现了,不过仅仅是框架,但未填充策略代码。换句话说:

protobuf定义了rpc的实现架构,其收益是:

无论如何实现rpc框架,用户的使用方式80%是相同的;

后面我会讲解如何在protobuf基础上,实现rpc框架;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: