您的位置:首页 > 其它

protobuf协议原理与应用

2017-07-04 16:50 246 查看
一、Protocol Buffer协议

protobuf协议是谷歌定义的一种跨平台、跨语言的结构化数据交换格式。类比于xml的文本格式,它可以提供二进制级数据交换服务,所以相比于前者,它的处理速度更快、资源消耗更小。它可以对各种数据流(文件、字符串等)轻松读写。该协议目前支持Java、Python和C++代码结构。

二、使用方法

1、首先根据需求定义消息文件(.proto)。定义方式类似于C++结构体,内部包含若干需要的属性字段。复杂一些的格式还可以使用嵌套定义。 

2、由编译器生成指定语言的源文件(如指定C++,会分别生成对应的.pb.h和.pb.cc文件)。编译命令如下:
protoc  -I = import_path  --cpp_out = dst_dir  import_path/file.proto
其中:protoc为protocol buffer提供的命令行编译器;-I选项用于指定待编译的proto文件所在目录;--cpp_out指定生成c++代码及路径(同样适用于python和java);最后参数指定proto文件路径。
3、将生成的文件(file.pb.h和file.pb.cc)拷贝到工程,加载后即可使用。

三、实践

1、下载protobuf源代码,按说明编译生成protoc和libprotobuf.so、libprotobuf-lite.so等文件,统一放在lib文件夹下。比较关键的是src文件夹,里面包含基本文
件定义,后面会用到。(一开始直接下载可执行文件免于再编译,后来使用时发现下载后只有protoc编译器,缺少动态库文件造成工程没法编译);

2、定义person.proto文件,如上图所示;

3、找到protoc所在目录,执行

protoc -I=/data/dev/ --cpp_out=/data/dev/ /data/dev/person.proto

生成person.pb.h、person.pb.cc文件;

4、在开发环境下构建C++项目,并将生成的两个文件拷贝到项目目录下。

5、配置项目包含目录,主要指src文件夹;配置依赖库,主要是libprotobuf-lite.so.9。

6、工程中包含person.pb.h,即可定义Person对象。

 
需要说明的是,编译器生成的.h和.cc文件包含了对.proto文件属性的setter和getter接口,以及读写二进制文件的SerializeToOstream及ParseFromIstream接口,这些接口均由编译器自动生成。不允许修改这两个文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: