Protobuf 简介
Protocol Buffer (Protobuf) 是 Google 于 2008 年发布的高性能、灵活的结构化数据标准。它主要用于方便地描述结构化的数据,可用于跨平台快速通讯,更适合用于大规模互联网系统的数据交换。相比 XML、JSON 等非结构化数据编码方式,Protobuf 的编解码效率要优于它们。Google 内部也在逐渐使用 Protobuf 来替代其内部的传输协议,如 gRPC。对于开发者来说,Protobuf 提供了一系列便利的工具,包括 protoc 编译器、预定义消息类型以及各种语言的库支持。
Protobuf 的安装配置
安装环境准备
如果你还没有安装过 protobuf 的相关工具或环境,那么首先需要准备好以下的软件环境:
- 下载安装包
- 安装 Java 环境(如果没有安装,请参考官方文档进行安装)
- 设置环境变量
- 安装 protobuf 运行环境
如果你的机器上已经有相关的软件环境,你可以跳过此步。
- 下载 protoc 编译器压缩包,本例采用 v3.9.1 版本
- 下载完成后解压,进入 bin 目录,执行 protoc.exe 命令查看是否正确安装。正常情况下应该会打印出类似如下信息:
protoc 3.9.1
Usage: protoc [OPTION]... FILES
Parse PROTO_FILES and generate output based on options given:
...
Please specify a command with --help for more information.
如果能够看到 Usage 的信息说明安装成功。 3. 设置系统环境变量,找到'计算机'–>'属性'–>'高级系统设置'–>'环境变量'菜单,在'用户变量'中点击'新建',然后输入 PROTOBUF_HOME,值为 protoc 所在目录。然后在'系统变量'中找到 PATH,点击编辑,在后面添加 %PROTOBUF_HOME%\bin。 4. 最后重新打开 CMD 或者其他终端窗口,验证是否生效。
protoc --version
正常情况下输出类似:
libprotoc 3.9.1
编写 Protobuf 文件
使用 Protobuf 消息格式主要涉及到两个方面:定义消息格式和使用消息格式。定义消息格式是在.proto 文件中声明消息类型,例如声明一个 Person 类型的消息格式,其中包含 name 字符串字段、id 整型字段和 email 字符串数组字段,可以按照如下方式定义。
syntax = "proto3"; //指定 protobuf 版本,语法最低版本为 proto3
package demo; //指定当前文件的命名空间,通常建议按功能模块划分不同的命名空间
message Person {
string name = 1;
int32 id = 2;
repeated string email = 3;
}
注意:
syntax:该选项用于指定该.proto文件的语法版本,proto3即是最新版本,也是本文使用的语法版本;package:该选项用于指定当前文件的命名空间,命名空间一般建议按功能模块划分不同的命名空间,避免不同项目间发生冲突。
通过 .proto 文件可以生成对应语言的代码,因此第一步需要确认自己正在使用的编程语言,本文使用 Java 作为演示语言。
使用 Protobuf 编译器编译生成 Java 类
使用 Protobuf 消息格式定义完毕后,就可以用 Protobuf 编译器生成对应的 Java 类了,生成 Java 类的过程实际是编译.proto文件生成一个.java文件,所以需要确保你已经安装了 Protoc 编译器。
编译命令如下:
$ protoc -I=< directory of.proto files> --java_out=<output directory> <list of.proto file paths>


