Google protobuf(C++) 学习笔记
Jun 5, 2016
本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.
Google Protocol Buffers简称 Protobuf, 是
简介
为什么学习protobuf?
想通过protobuf的序列化来做一个C++的微型RPC框架.
本文主要是学习protobuf的使用, 大量参考官方文档.
为什么要使用protobuf?
- 因为
protobuf是谷歌出的, 性能不过, 重要是的我是谷歌脑残粉(逃 - 官方文档中提到一些protobuf的优点, protobuf灵活高效的结构化数据存储格式. 方便用于序列化, 适合做RPC的数据交换.
- 相比
XML,protobuf比 XML 更小、更快、更简单. 仅需要写一个*.proto文件描述需要的数据结构, protobuf会帮助你实现相关类和方法(自动化多好!). - 目前提供
C++, Java, Python, Go, C#等多种语言的API
安装
神奇Mac版homebrew帮你解决一切问题
|
|
学习笔记
通过一个简单的官方例子来学习protobuf
我们首先定义一个addressbook.proto, 通过message来定义需要序列化的数据结构, message内包含许多key-value对
|
|
ps:
message中有多种类型,bool, int32, float, double, ,string and enum以及内嵌的messagemessage内可以定义optional、required、repeated字段
定义好*.proto文件后, 我们通过protobuf提供的protoc命令行工具来自动生成相关数据结构源码
|
|
-I指明源文件所在目录--cpp_out指向想要输出的文件路径- 最后一个参数为
.proto所在的路径
使用protobuf
生成我们自定义的类后, 我们开始尝试使用生成的文件. add_person.cpp用于从用户的输入中, 创建一个Person并初始化一个Person对象, 并将该对象通过二进制的形式写入给定文件中.
|
|
list_person.cpp通过给定的文件名读取Person对象, 并将每个Person对象输出.
|
|
完成后, 我们分别编译两个源文件, 编译命令如下:
|
|
图片为执行writer和reader的结果

实现RPC
|
|