美文网首页工具类
C++入门到放弃(四),protobuf教程

C++入门到放弃(四),protobuf教程

作者: chanming | 来源:发表于2016-11-19 13:35 被阅读2558次

    前言

    在网络传输中,经常有大端小端的区别,并且与我们编写的程序交互的,不一定也是C/C++,例如安卓,所以我们需要一个协议,能够进行数据的传输。大部分人最常用的,可能是json了,今天我们介绍另外一个工具,protobuf,这是一个google的开源项目。支持c++,java,python等多种语言。

    下载与安装

    github代码地址
    进入代码目录:
    ./configure --prefix=/usr/local/protobuf
    sudo make
    sudo make install
    如果是ubuntu或者centos的,也可以使用yum或者apt-get安装

    使用

    使用protobuf需要我们定义一个proto文件,用来定义protobuf消息。

    Protobuf消息定义

    消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。
    字段格式:限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]

    • 限定修饰符:
      • required 表示这个字段必填
      • optional 可选
      • repeated 可重复,我们可以理解为Array,并且可以为空
    • 数据类型:


    • 字段名称:protobuf建议以下划线命名而非驼峰式。例如app_name优于appName。(作为一个java程序员,我还是改不了驼峰呀T T)
    • 字段编码值:使用protobuf转化的byte中并没有带字段名称,而是一个字段编码,字段编码是一个正32位整数,通常来说,越小效率越高。
    • 默认值这个没啥好解释的。
      当然,protobuf还支持Import/enum/package等关键字

    实践:

    接下来需要跟客户端进行交互,我们新建一个touch_message.proto的文件,定义TouchMesssage理解为一个心跳的data。



    然后执行命令

    Paste_Image.png

    我们就能看到生成的对应的.h跟.cpp文件了。


    我们发现其实是生成一个类,类中有着对应的方法。



    我们在另外一个文件中编写一个test的类。我们可以用get/set方法。SerializeToArray是序列化,ParsFromArray是反序列化。

    然后我们就可以编译运行了,编译的时候需要引入对应的.h文件


    需要把对应的参数替换成你安装的位置即可。


    运行结果,达成预期,并且size会比我们使用json更小。别小看小了这么一点点。当你系统的量上来后,作用还是很大的。

    相关文章

      网友评论

        本文标题:C++入门到放弃(四),protobuf教程

        本文链接:https://www.haomeiwen.com/subject/qtxepttx.html