找回密码
 立即注册
查看: 127|回复: 0

详细介绍Protobuf 环境部署

[复制链接]
发表于 2023-2-2 07:43 | 显示全部楼层 |阅读模式
Protobuf (Protocol Buffers) 是 Google 开发的一种数据序列化格式。它可以把结构化数据序列化成二进制或者 JSON 格式,并且支持多种语言,可以在不同语言之间进行数据交互。
Protobuf 环境部署包括两个部分:
安装 protoc,protoc 是 Protocol Buffers 的编译器,用来将 .proto 文件转化成对应语言的代码。
安装对应语言的 Protobuf 库。
下面是部署 Protobuf 的详细步骤:
安装 protoc
Windows: 下载 protoc 的 Windows 版本,解压并将 protoc.exe 文件加入系统环境变量 PATH 中。
Linux/Mac: 安装 protoc。
# Ubuntu/Debian
sudo apt-get install protobuf-compiler
# MacOS
brew install protobuf
安装对应语言的 Protobuf 库
Python: 使用 pip 安装
pip install protobuf
C++: 使用 CMake 安装
# 下载源码
git clone https://github.com/protocolbuffers/protobuf.git
# 编译安装
cd protobuf
mkdir build && cd build
cmake ..
make
make install
Java: 下载 protobuf-java 的 jar 包并加入项目的 classpath 中。
其他语言: 请查找对应语言的 Protobuf 库并安装。
生成代码
使用 protoc 编译 .proto 文件
protoc --python_out=. example.proto
使用生成的代码来序列化或者反序列化数据。
安装完 Protobuf 后,就可以开始使用它来进行数据序列化和反序列化了。
首先,需要使用 .proto 文件来定义数据结构。例如,下面是一个简单的 .proto 文件:
syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
}

这个 .proto 文件定义了一个名为 Person 的消息类型,包含了两个字段:name 和 age。
然后,使用 protoc 工具将 .proto 文件编译成对应语言的代码,如下:
protoc --python_out=.
example.proto
这样就会在当前目录生成 example_pb2.py文件,其中包含了用于序列化和反序列化的代码。
最后,使用生成的代码来序列化和反序列化数据。例如,在 Python 中可以这样做:
import example_pb2

# 序列化
person = example_pb2.Person(name='John Doe', age=30)
data = person.SerializeToString()

# 反序列化
person = example_pb2.Person()
person.ParseFromString(data)
print(person.name) # John Doe
print(person.age) # 30

这样就能在 Python 中使用 protobuf 来进行数据序列化和反序列化了。对于其他语言也是类似的。
Protobuf 在性能上优于 JSON 和 XML,并且支持多种语言,可以在不同语言之间进行数据交互,适合用于分布式系统和移动端应用等!
另外,Protobuf 还支持一些高级功能,如:
消息类型的继承
枚举类型
嵌套消息
默认值
必选字段和可选字段
一对多字段
扩展字段
这些高级功能可以使你的数据结构更加灵活和简洁,并且可以更好地支持版本迭代。
此外,Protobuf 还有很多第三方库可以使用,比如:
grpc-python:使用 Protobuf 和 gRPC 实现分布式服务。
protobuf-to-dict:将 Protobuf 消息转换成 Python 字典。
protobuf-json:将 Protobuf 消息转换成 JSON。
总之,Protobuf 是一个高效、灵活、跨语言的数据序列化格式,可以用于很多场景,特别是分布式系统和移动端应用!
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 09:56 , Processed in 0.087301 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表