Proto 限制

介绍 proto schema 支持元素数量的限制。

本文档记录了 proto schema 中支持的元素数量(字段、枚举值等)的限制。

这些信息由许多工程师收集整理,但并不详尽,部分内容可能已过时或不准确。欢迎在工作中发现新的限制后,补充到本文档,帮助他人。

字段数量限制

仅包含单一 proto 字段(如 Boolean)的消息:

  • ~2100 个字段(proto2)
  • ~3100 个字段(proto3,未使用 optional 字段)

通过单一字段(如 Boolean)扩展的空消息:

  • ~4100 个字段(proto2)

proto3 不支持扩展。

要测试此限制,可创建一个超过上述上限字段数量的 proto 消息,并使用 Java proto 规则进行编译。该限制来源于 JVM 规范。

枚举值数量限制

最低限制约为 1700 个值(Java)。其他语言有不同的限制。

消息总大小限制

任何序列化形式的 proto 消息必须小于 2GiB,这是所有实现支持的最大大小。建议限制请求和响应的大小。

Proto 反序列化深度限制

  • Java: 100
  • C++: 100
  • Go: 10000 (计划将其减少到 100)

如果尝试反序列化嵌套深度超过限制的消息,反序列化将失败。