文章目录
- 序列反序列化
- 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
编译成对应的语言,里面包含了:
- 类的字段定义
- 处理字段的方法
- 处理类的方法
这都是一键生成。
有了代码生成机制,开发者就无需再编写解析协议的代码了。
安装ProtoBuf
windows
下载地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)
根据电脑配置选择
win32
或者win64
下载解压完毕之后:
我们需要的是bin
目录下的protoc.exe
,将其配置在环境变量下(这个就不多说了哈)。
在终端输入protoc --version
,有显示版本号表明成功
Ubuntu
安装依赖库:
sudo apt-get install autoconf automake libtool curl make g++ unzip -y
还是刚刚那个地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)
all
表示支持所有语言,如果只想C++/Java,选择指定的即可
wget下载:
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.1/protobuf-all-21.1.zip
解压:
unzip protobuf-all-21.1.zip
进入目录之后,编译protobuf
-
autogen.sh
如果是指定的某一面语言,则不需要此步
-
执行
configure
,有2种方式,任选其一:./configure
(默认安装在/usr/local
目录,lib
和bin
都是分散的)./configure --prefix=/usr/local/protobuf
(统一安装在/usr/local/protobuf
)
-
make(时间较长)
-
make check(时间较长)
有可能出现这种情况:
这是因为test模块的测试用例太多了,需要增大服务器
swap
分区,可参考此篇文章:Ubuntu 18.04 swap分区扩展_ubuntu18.04 如何查看swapfile文件路径
可以先尝试3g,不行5g,再不行7g
-
sudo make install
-
如果只执行
./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/
-
执行
source /ect/profile
最后输入protoc --version
,查看版本,有显示表面安装成功
Centos
安装依赖库:
sudo yum install autoconf automake libtool curl make gcc-c++ unzip
其他就和Ubuntu类似了
目前Centos停止维护了,建议后续开发采用Ubuntu