zoukankan      html  css  js  c++  java
  • protobuf配置与使用

    Protobuf配置与安装

    1 安装与配置

               1、protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/

               2、下载最新的protobuf,下载地址:https://code.google.com/p/protobuf/downloads/list

               3、下载protobuf2.5.o版本,protobuf-2.5.0.tar.gz解压并进行安装。

       解压:tar xvf protobuf-2.5.0.tar.gz

       安装步骤:(1)./configure (2)make (3)make check (4)make install

    注意:安装成功后,将它的bin和lib目录分别加入到PATH和LD_LIBRARY_PATH环境变量,以方便直接调用。

    通常建议安装到/usr/local目录下,执行configure时,指定--prefix=/usr/local/protobuf即可

    设置环境变量过程:编辑/etc/profile,在文件末尾添加:

           export PATH=$PATH:/usr/local/protobuf/bin

           export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

    2 简单实例

             2.1 编写example.proto

            clip_image001

              2.2 生成pb.h 和pb.c

             protoc  -I=src_dir  --cpp_out=dst_dir  $src_dir/addressbook.proto 

                        生成example.pb.h 和example.pb.cc

                       clip_image002

              2.3 使用protobuf

                     2.3.1 编写Write.cpp

                      clip_image004

              注:

                     ptest::person 的定义在example.proto 生成的example.pb.h 文件中进行声明,SerializeToOstream将对象序列化后写入fstream流。

                   2.3.2 编译write.cpp

                   clip_image006     

            注:

               -I /usr/local/include –L /usr/local/lib 分别为编译安装protobuf对应文件位置(cygwin对应目录位置),CentOs中编译安装protobuf后对应的文件位置        为:/usr/local/protobuf/include 和 /usr/local/protobuf/lib

                  2.3.3 编写reader.cpp

                    reader.cpp文件如下:

                    clip_image007

                注:

                      1、ParseFromIstream从fstream中读取文件并反序列化。

                      2、编译reader.cpp:

                         clip_image009

      3 数据类型

             3.1 消息定义

              Protobuf消息定义:

              消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。

              字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]

              限定修饰符包含 requiredoptional epeated

             1) required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。

             2) optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。

            3) repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。

          3.2 数据类型

              Protobuf定义了一套基本的数据类型,如下图所示:

              clip_image011

    参考资料:

           http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ 

           http://www.cnblogs.com/Anker/archive/2013/07/24/3209764.html

  • 相关阅读:
    《Forward团队-爬虫豆瓣top250项目-开发文档》
    结对-网页贪吃蛇游戏-项目总结
    Forward团队-爬虫豆瓣top250项目-模块测试过程
    Forward团队-爬虫豆瓣top250项目-模块开发过程
    Forward团队-爬虫豆瓣top250项目-项目总结
    《软件工程课程总结》
    课后作业-阅读任务-阅读提问-4
    《20171201-构建之法:现代软件工程-阅读笔记》
    Forward团队-爬虫豆瓣top250项目-最终程序
    课后作业-阅读任务-阅读提问-3
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3969988.html
Copyright © 2011-2022 走看看