Proto 限制

涵盖了 proto 模式中支持的元素数量的限制。

本主题记录了 proto 模式中支持的元素(字段、枚举值等)数量的限制。

此信息是许多工程师发现的限制的集合,但并不详尽,并且在某些方面可能不正确/过时。 当您在工作中发现限制时,请将其贡献到本文档中,以帮助其他人。

字段数量

仅包含单数 proto 字段(如布尔值)的消息

  • ~2100 个字段 (proto2)
  • ~3100 (proto3 不使用可选字段)

由单数字段(如布尔值)扩展的空消息

  • ~4100 个字段 (proto2)

扩展仅受 proto2 支持。

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

枚举中的值数量

最低限制约为 1700 个值,在 Java 中。 其他语言有不同的限制。

消息的总大小

任何以序列化形式存在的 proto 必须小于 2GiB,因为这是所有实现支持的最大大小。 建议对请求和响应大小进行限制。

Proto 反序列化的深度限制

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

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