protobuf协议原理与应用

一、Protocol Buffer协议

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


二、使用方法

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

2、由编译器生成指定语言的源文件(如指定C++,会分别生成对应的.pb.h.pb.cc文件)。编译命令如下:

protoc  -I = import_path  --cpp_out = dst_dir  import_path/file.proto

其中:protocprotocol buffer提供的命令行编译器;-I选项用于指定待编译的proto文件所在目录;--cpp_out指定生成c++代码及路径(同样适用于pythonjava);最后参数指定proto文件路径。

3、将生成的文件(file.pb.hfile.pb.cc)拷贝到工程,加载后即可使用。


三、实践

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

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

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

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

生成person.pb.hperson.pb.cc文件;

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

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

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

 

需要说明的是,编译器生成的.h.cc文件包含了对.proto文件属性的settergetter接口,以及读写二进制文件的SerializeToOstreamParseFromIstream接口,这些接口均由编译器自动生成。不允许修改这两个文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
protobuf协议有以下几个好处: 1. 性能好/效率高:protobuf直接用二进制来表示数据,相比于XML和JSON格式,protobuf在编码后体积更小,编解码速度更快,具有更高的转化效率。相比于JSON,protobuf的时间效率和空间效率都是JSON的3-5倍。 2. 可扩展性强:protobuf是一种灵活、高效和自动化机制的结构数据序列化方法,可用于数据通信协议和数据存储等。它的特点是支持向后兼容和向前兼容的特性,可以方便地对数据结构进行扩展和修改,而不会破坏已有的数据。 3. 省带宽:由于protobuf使用二进制格式表示数据,相对于文本格式如XML和JSON,它的数据传输量更小,可以更有效地利用网络带宽资源。 4. 跨平台、跨语言支持:protobuf是一种语言无关、平台无关的序列化结构数据方法,可以在不同的编程语言和不同的平台上进行数据交换和存储。 总的来说,protobuf协议具有优秀的性能和效率、可扩展性强以及跨平台、跨语言支持等优点,使其成为一种广泛应用于数据通信和存储的协议格式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [protobuf优缺点及编码原理](https://blog.csdn.net/Guzarish/article/details/120903097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值