可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

Protobuf 序列化框架

Protocol Buffers(简称 Protobuf)是 Google 开发的一种高效、灵活、跨语言的数据序列化框架。主要用于结构化数据的序列化和反序列化,类似于 XML、JSON 或 Thrift,但具有更高的性能和更小的数据体积,适用于网络通信、持久化存储等场景。

Protobuf 的核心特性

高效性

  • 二进制格式,比 JSON、XML 更紧凑。
  • 序列化和反序列化速度非常快。

跨语言支持

  • 支持多种语言:C++, Java, Python, C#, Go, Ruby, Objective-C, PHP, Dart 等。
  • 可扩展插件机制支持新增语言。

强类型与接口定义

  • 使用 .proto 文件定义消息结构,确保数据的一致性和可读性。
  • 支持嵌套、枚举、重复字段等复杂结构。

向后兼容

  • 新旧版本的消息可以互相解析(通过 optional 字段和 tag 编号机制)。

IDL(接口定义语言)驱动开发

  • 先定义 .proto 接口,再生成代码,便于服务间通信设计。

基本使用流程

1. 定义 .proto 文件

// person.proto
syntax = "proto3";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
}

2. 使用编译器生成代码

protoc --python_out=. person.proto

这会生成 person_pb2.py(Python 示例),其中包含用于操作 Person 消息的类。

3. 使用生成的代码进行序列化/反序列化(Python 示例)

import person_pb2
# 创建对象
person = person_pb2.Person()
person.name = "Alice"
person.id = 123
person.email = "alice@example.com"
# 序列化为字节流
serialized_data = person.SerializeToString()
# 反序列化
new_person = person_pb2.Person()
new_person.ParseFromString(serialized_data)
print(new_person.name) # 输出 Alice

Protobuf vs JSON vs XML

特性

Protobuf

JSON

XML

数据大小

小(通常小 3~5 倍)

中等

序列化/反序列化速度

中等

可读性

不可读(二进制)

可读

可读

跨语言支持

向后兼容性

强(tag + optional)

高级功能

  • 嵌套消息
message AddressBook {
repeated Person people = 1;
}
  • 枚举类型
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
  • Oneof(只存一个字段)
message SampleMessage {
oneof test_oneof {
string name = 1;
int32 id = 2;
}
}
  • Map 类型
map<string, int32> scores = 3;
  • gRPC 整合Protobuf 是 gRPC 的默认数据交换格式,常用于构建高性能 RPC 服务。

工具与生态

  • protoc:官方编译器,用于生成各种语言的代码。
  • protobuf库:各语言的标准库(如 google.protobuf)。
  • 调试工具
  • protoc --decode_raw:查看原始二进制内容。
  • 第三方可视化工具(如 protobuf-inspector)。
  • schema管理平台:用于集中管理 .proto 文件,如 Apicurio Registry、SchemaHero 等。

适用场景

  • 微服务之间的高效通信(配合 gRPC)
  • 游戏中实体状态同步
  • 日志系统中的结构化日志
  • 大数据处理中数据的紧凑存储(如 Apache Hadoop、Apache Flink)
  • 移动端与服务器之间减少流量传输

注意事项

  • 不加密:Protobuf 本身不提供加密功能。
  • 不适合人类阅读:二进制格式不可读,需要 schema 解析。
  • schema变更需谨慎:虽然支持兼容性变更,但破坏性修改会导致解析失败。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言