十分钟上手Protocol Buffer

ProtocolBuffer是什么?

ProtocolBuffer(简写PB)是一个方便序列化和反序列化而写的一个支持多语言(C++、java、python、go等)的工具。能够看看Github上谷歌的ReadMe文档:https://github.com/google/protobuf html

安装ProtocolBuffer工具

下载源码

git clone git@github.com:google/protobuf.git

编译安装

关于编译安装的步骤参考Github上的Readme文档,也能够参考中文的文档:http://bafeimao.net/2015/11/14/compile-protobuf-on-mac/ java

首先,安装依赖。

PB依赖autoconf、automake、libtool、curl,在各个平台上安装这些依赖便可。好比在mac上是这样:python

brew install autoconf automake libtool curl

而后运行autogen脚本

./autogen.sh

我在运行这个脚本的时候,会遇到gmock下载被墙的问题,前往这个地址手动下载便可:https://googlemock.googlecode.com/files/gmock-1.7.0.zip 下载以后,将它丢到源代码目录便可。同时将脚本中的c++

#curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip 

注释掉便可。git

编译

$ ./configure
$ make
$ make check
$ sudo make install

查看是否安装完毕

protoc --version

这里的protoc是protocol buffer的编译器,将*.proto接口文件编译成对于的头文件和源代码文件,能够在下面的例子教学中用到。github

Protocol Buffer的官方例子

例子是神马,在哪一个地方?

例子是一个添加地址的例子,将用户的姓名、邮件地址序列化以后写入到文件中。例子在Github的example文件夹中。web

例子如何编译和运行

有一个makefile文件,里面包含了C++、java、python等的编译,咱们这里学习C++,故运行:ruby

make cpp

咱们能够查看makefile文件,能够找到关键的编译语句以下:curl

protoc_middleman: addressbook.proto
      protoc --cpp_out=. --java_out=. --python_out=. addressbook.proto
add_person_cpp: add_person.cc protoc_middleman
      pkg-config --cflags protobuf  # fails if protobuf is not installed
      c++ add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config --cfla    gs --libs protobuf`

我在运行的时候,遇到了pkg-config找不到的问题,安装便可:svg

brew install pkg-config

编译以后就能够获得可执行文件。以下方式运行:

./add_person_cpp zy

按照提示输入相关信息,就能够获得zy文件。

例子程序简单解读

例子的教学能够参考官方文档:https://developers.google.com/protocol-buffers/docs/cpptutorial
也能够参考这个中文文档:http://www.cnblogs.com/yymn/articles/5012396.html add_person.cc程序的主流程以下: * 参数解析 * 定义一个address的对象 * 处理输入,为对象赋值 * 将对象序列化到输出流中 这里就不贴代码了,看看源码就知道怎么回事了 至此,Protocol Buffer的安装和官方例子的学习基本结束,能够明白PB的基本用法流程,接下来就是在具体的场景中使用,而后进阶弄清楚PB的实现原理了。