Bootstrap

[ProtoBuf] 介绍 | 保姆级win/linux安装教程

目录

一、序列化概念

二、ProtoBuf 是什么

三、ProtoBuf 的使用特点

ProtoBuf 在不同操作系统下的安装

一、ProtoBuf 在 Windows 下的安装

二、ProtoBuf 在 Linux 下的安装

三、检查是否安装成功


安装教程 可以直接目录跳转到后面

笔记参考:官方文档


一、序列化概念

序列化和反序列化

  • 序列化:将对象转换为字节序列的过程称为对象的序列化。
  • 反序列化:将字节序列恢复为对象的过程称为对象的反序列化。

什么情况下需要序列化?

  • 存储数据当我们想把内存中的对象状态保存到一个文件中或者存到 数据库 中时,就需要进行序列化。
  • 网络传输虽然网络可以直接传输数据,但无法直接传输对象。因此,在传输前需要对对象进行序列化,在传输完成后进行反序列化以恢复对象。例如,在 socket 编程中发送与接收数据时就需要这样做。

如何实现序列化?

  • 可以通过多种方式实现序列化,包括 XML、JSON 和 Protocol Buffers(简称 ProtoBuf)等。

二、ProtoBuf 是什么

  • 根据官方定义,Protocol Buffers(ProtoBuf)是 Google 提供的一种语言无关、平台无关、可扩展的 序列化结构数据的方法 ,适用于通信协议、数据存储等领域。
  • ProtoBuf 类似于 XML,但是它更小、更快、更简单。ProtoBuf 提供了一种灵活且高效的自动化机制来序列化结构化数据。
  • 用户可以定义数据结构,然后使用特殊生成的源代码轻松地在各种数据流中使用多种语言编写和读取结构化数据。甚至可以在更新数据结构的同时,不破坏由旧数据结构编译的已部署程序。

简单来说,ProtoBuf(全称为 Protocol Buffer)是一种让结构化数据序列化的方法,具有以下特点:

    • 语言无关、平台无关支持 Java、C++、Python 等多种语言,并支持多个平台。
    • 高效相比 XML 更小、更快、更为简单。
    • 扩展性、兼容性好即使更新了数据结构,也不会影响或破坏已经存在的旧程序。

三、ProtoBuf 的使用特点

  1. 编写 .proto 文件:首先需要 编写 .proto 文件,用于定义结构化的对象(即 message)及其属性内容。
  2. 使用 protoc 编译器编译 .proto 文件:接下来,使用 protoc 编译器编译 .proto 文件,这会生成 一系列接口代码,并存储在新生成的头文件和源文件中。
  3. 依赖生成的接口:将编译生成的头文件包含进我们的代码中,以便实现对 .proto 文件中定义的字段进行设置和获取,以及对 message 对象进行序列化和反序列化。

使用特点:ProtoBuf 需要依赖通过编译生成的头文件和源文件来使用。

有了这种 代码生成机制,开发人员再也 不用吭哧吭哧地编写那些协议解析的代码了(干这种活是典型的吃力不讨好)


ProtoBuf 在不同操作系统下的安装

一、ProtoBuf 在 Windows 下的安装

1. 下载 ProtoBuf 编译器

  • 下载地址:github.com
  • 可以根据电脑情况选择是否下载最新版本。

  • 下载后,将压缩包解压到本地目录。解压后的文件夹内包含 bin、include 文件以及一个 readme.txt。

2. 配置环境变量

  • 将解压后文件夹中的 bin 目录添加到系统环境变量的 Path 中。

3. 检查是否配置成功

  • 打开 cmd,输入命令 protoc --version 查看版本信息。
  • 如果有显示版本号,说明安装成功。

也可以看这篇前文,借助 vcpkg 安装的 protobuf:

[ChatClient_1] 服务拆分 | 环境搭建 | model_1 | 命名


二、ProtoBuf 在 Linux 下的安装

1. 下载 ProtoBuf

  • 在下载 ProtoBuf 前,确保已安装依赖库:autoconf automake libtool curl make g++ unzip。
    • Ubuntu 用户可使用以下命令安装:sudo apt-get install autoconf automake libtool curl make g++ unzip -y
    • CentOS 用户则使用:sudo yum install autoconf automake libtool curl make gcc-c++ unzip

  • 下载地址:github.com
  • 根据需要选择对应的版本:
    • C++:cpp.zip
    • JAVA:java.zip
    • 支持全部语言:all.zip(例如选择 protobuf-all-21.11.zip)

  • 使用 wget 命令下载:wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

  • 下载完成后,使用 unzip protobuf-all-21.11.zip 解压,并进入解压后的文件夹:cd protobuf-21.11


2. 安装 ProtoBuf

进入解压好的文件,执行以下命令:

# 第⼀步执⾏autogen.sh,但如果下载的是具体的某⼀⻔语⾔,不需要执⾏这⼀步。
./autogen.sh 
 
# 第⼆步执⾏configure,有两种执⾏⽅式,任选其⼀即可,如下:
# 1、protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的
./configure 
# 2、修改安装⽬录,统⼀安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf

第一步:因为上面我选择的是 all.zip,所以需要执行:./autogen.sh

第二步:选择统一安装(推荐):./configure --prefix=/usr/local/protobuf

再依次执行:

make // 执⾏15分钟左右
make check // 执⾏15分钟左右
sudo make install

第一步:make

第二步:make check

有的人可能会在 make check 出现错误

出现错误的原因是 test 的模块里面有非常多的测试用例,这些用例对服务器环境要求特别严格,需要增大下 swap 分区,具体操作可参考:

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

(建议可以先扩大 3G,再执行 make check。如果还是报错,再扩大到 5G 重新执行 make check,如果 swap 分区为 0,就直接跳过这一步 make check)

  • 执行 make check 后,出现以上内容就可以执行第三步:sudo make install

如果在执行 configure 时,当时选择了第一种执行方式,也就是:./configure,那么到这就可以正常使用 protobuf 了。

但如果是选择了跟我一样的第二种执行方式,即修改了安装目录:./configure --prefix=/usr/local/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/

先执行命令:sudo vim /etc/profile

最后一步,重新执行 /etc/profile 文件:

source /etc/profile

三、检查是否安装成功

  • 输入 protoc --version 查看版本信息

若有显示则说明安装成功啦~

;