protobuf使用方法(c++为例)
2014-01-29 20:35
756 查看
protobuf使用方法(c++为例)
1. 定义数据结构;
2. 实现数据结构与byte的相互转换;
首先解释下为何一个数据结构要平白无故的转换成byte:
因为网络上传输的都是二进制,所以要实现数据结构和byte的相互转换;
一般流程是:
发送方:数据结构->byte 将byte发送;
接收方:接收byte,转换:byte->数据结构
下面以实例进行解释:
1.定义数据结构
文件保存为echo.proto,然后运行
protoc -I=. --cpp_out=. echo.proto
生成echo.pb.h和echo.pb.cc
至此,第一步完成啦O(∩_∩)O
2. 实现数据结构与byte的相互转换;
很简单,就3步:
1.赋值;
2.转成byte;
3.将byte转回数据结构;
编译:
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框架;
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框架;
相关文章推荐
- 在Javascript中使用protobuf与c++进行通信
- DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法
- c++ 使用pbc 解决lua 解析protobuf 问题
- 简单介绍google protobuf rpc框架使用方法
- 在Javascript中使用protobuf与c++进行通信
- 在Cocos2d-Lua中使用ProtoBuf(Xcode配置方法)
- arm-linux-gcc-4.4.3交叉编译google的protobuf。以及使用方法
- 在Cocos2d-Lua中使用ProtoBuf (Xcode配置方法)
- C# protobuf的使用方法
- C# 快速使用protobuf的简单方法
- Unity中为什么使用protobuf以及使用方法
- c++使用Protobuf Message转Json字符串(Json库使用Json cpp)
- c++使用proto文件方法简介
- protobuf C++ 使用示例
- C# protobuf的使用方法
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
- go语言使用protobuf与c++做数据通信。
- protobuf extensions(extend)的消息定义及Java使用方法
- C# protobuf的使用方法
- protobuf使用方法