ProtoBuf介绍及安装

server/2024/9/23 16:19:57/

文章目录

    • 序列反序列化
    • ProtoBuf特点
    • 安装ProtoBuf
      • windows
      • Ubuntu
      • Centos

序列反序列化

在网络传输过程当中,可以理解为:

  • 发送方
  • 接收方

它们彼此要通信,先要定好一个规则,也就是协议,双方都能认识的结构化数据(C++中的对象)。

网络传输,传输的是二进制序列,将结构化对象转换成二进制序列,叫做序列号;将二进制序列恢复成对象,叫做反序列化。

此外,将内存级数据持久化保存到磁盘当中,这个过程也需要序列化。

更详细可以看此篇文章:Linux网络编程——序列反序列化


现在较为主流的序列化工具有Json、Xml以及此篇介绍的ProtoBuf(protocol buffer)

ProtoBuf特点

本身特点:

  • 语言无关、平台无关:支持C++、Python、Java等多种语言,支持多个平台
  • 高效:比XML更小、更快、更简单
  • 扩展性、兼容性好:可以更新数据结构,而不影响原有的旧程序

使用特点:

  • ProtoBuf需要依赖提供编译生成的头文件和源文件来使用的

如何理解这句话:

正常情况:

class xx
{定义属性字段处理字段的方法处理类的方法:序列、反序列
}

PB:

message xx
{定义属性字段 
}

ProtoBuf为我们提供了一个编译器,通过编译,将这份message编译成对应的语言,里面包含了:

  • 类的字段定义
  • 处理字段的方法
  • 处理类的方法

这都是一键生成。

image-20240922201034646

有了代码生成机制,开发者就无需再编写解析协议的代码了。

安装ProtoBuf

windows

下载地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)

根据电脑配置选择win32或者win64

image-20240922201610327

下载解压完毕之后:

image-20240922201808517

我们需要的是bin目录下的protoc.exe,将其配置在环境变量下(这个就不多说了哈)。

在终端输入protoc --version,有显示版本号表明成功

image-20240922202217488

Ubuntu

安装依赖库:

sudo apt-get install autoconf automake libtool curl make g++ unzip -y

还是刚刚那个地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)

image-20240922202456208

all表示支持所有语言,如果只想C++/Java,选择指定的即可

image-20240922202657583

wget下载:

wget https://github.com/protocolbuffers/protobuf/releases/download/v21.1/protobuf-all-21.1.zip

解压:

unzip protobuf-all-21.1.zip

进入目录之后,编译protobuf

  1. autogen.sh

    如果是指定的某一面语言,则不需要此步

    image-20240922204655949

  2. 执行configure,有2种方式,任选其一:

    • ./configure(默认安装在/usr/local目录,libbin都是分散的)
    • ./configure --prefix=/usr/local/protobuf(统一安装在/usr/local/protobuf

    image-20240922205115238

  3. make(时间较长)
    image-20240922205200158

  4. make check(时间较长)
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    有可能出现这种情况:

    在这里插入图片描述

    这是因为test模块的测试用例太多了,需要增大服务器swap分区,可参考此篇文章:

    Ubuntu 18.04 swap分区扩展_ubuntu18.04 如何查看swapfile文件路径

    可以先尝试3g,不行5g,再不行7g

  5. sudo make install

  6. 如果只执行./configure的时候,是按默认目录安装,此时就能直接使用protobuf
    如果是指定路径,还需要在/etc/profile添加内容:

    #(动态库搜索路径)程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
    #(静态库搜索路径)程序编译期间查找动态链接库时指定查找共享库的路径
    export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
    #执行程序搜索路径
    export PATH=$PATH:/usr/local/protobuf/bin/
    #c程序头文件搜索路径
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
    #c++程序头文件搜索路径
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
    #pkg-config路径
    export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
    
  7. 执行source /ect/profile

最后输入protoc --version,查看版本,有显示表面安装成功
在这里插入图片描述

Centos

安装依赖库:

sudo yum install autoconf automake libtool curl make gcc-c++ unzip

其他就和Ubuntu类似了

目前Centos停止维护了,建议后续开发采用Ubuntu


http://www.ppmy.cn/server/120867.html

相关文章

制药企业医学信息团队及其职能

对于制药行业来说,医学信息职能的相关服务可追溯到 1950 年代。当制药企业的药品被更多的人所关注时,人们需要从所属公司了解准确、最新的药品信息,来帮助人们合理的使用药品。事实上,法规已经要求制药企业为所属公司的药品针对客…

Nginx 入门指南:从安装到配置的全方位探索

目录 1. 简介 什么是 Nginx Nginx 的主要功能 Nginx 的应用场景 2. 下载 Nginx 官方网站介绍 不同版本的选择(稳定版、主线版等) 3. 安装 Nginx 源码编译安装(推荐) 使用包管理器安装(如 apt, yum&#xff0…

【计算机网络 - 基础问题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

代码随想录算法训练营Day10

150. 逆波兰表达式求值 力扣题目链接&#xff1b;. - 力扣&#xff08;LeetCode&#xff09; Collection——Deque——LInkedList类 class Solution {public int evalRPN(String[] tokens) {Deque<Integer> myquenew LinkedList<>();for(String a:tokens){if(a.…

股指期货理论价格计算公式是什么?

股指期货&#xff0c;作为金融衍生品的一种&#xff0c;其价格与现货市场的股指价格紧密相关&#xff0c;但又受到多种因素的影响。了解股指期货理论价格的计算公式&#xff0c;对于投资者进行套利交易、风险管理等具有重要意义。本文将详细解读股指期货理论价格的计算公式&…

Android Display性能问题教战手册4-典型案例分析

系列文章请扫关注公众号&#xff01; Android Display Graphics系列文章-汇总 本文主要包括部分&#xff1a; 1、连续冷启动退出多款应用以后卡顿 2、VSYNC设定异常导致卡顿 本文主要两个典型案例&#xff0c;分析System显示整体行为&#xff0c;逐步分析问题根因&#xff…

Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像

1.定义参数&#xff1a; 使用 booleanParam 定义一个布尔参数&#xff0c;示例如下 booleanParam(name: BUILD_DOCKER, description: 是否构建Docker镜像, defaultValue: false)2.使用参数&#xff1a; 在 stage 中&#xff0c;根据参数的值决定构建方式&#xff1a; stage(编…

【医疗大数据】基于 B2B 的医疗保健系统中大数据信息管理的安全和隐私问题分析

基于 B2B 的医疗保健系统中大数据信息管理的安全和隐私问题分析 1、引言 1-1 医疗大数据的特点 10 V模型&#xff1a;在医疗领域&#xff0c;大数据的特点被描述为10 V&#xff0c;包括价值&#xff08;Value&#xff09;、体量&#xff08;Volume&#xff09;、速度&#xf…