Proto 限制
涵盖 proto 架构中支持的元素数量的限制。
本主题记录了 proto 架构中支持的元素(字段、枚举值等)数量的限制。
此信息是许多工程师发现的限制的集合,但并非详尽无遗,并且在某些方面可能不正确/已过时。当您在工作中发现限制时,请将其贡献到本文档中以帮助他人。
字段数量
仅包含单一 proto 字段(例如布尔值)的消息
- 约 2100 个字段 (proto2)
- 约 3100 个(未使用 optional 字段的 proto3)
由单一字段(例如布尔值)扩展的空消息
- 约 4100 个字段 (proto2)
proto3 不支持扩展。
要测试此限制,请创建一个包含超过上限数量字段的 proto 消息,并使用 Java proto 规则进行编译。该限制来自 JVM 规范。
枚举中的值的数量
最低限制是约 1700 个值,在 Java 中。其他语言有不同的限制。
消息的总大小
任何序列化形式的 proto 都必须小于 2GiB,因为这是所有实现支持的最大大小。建议限制请求和响应的大小。
Proto 反序列化的深度限制
- Java: 100
- C++: 100
- Go: 10000(有计划将其减少到 100)
如果您尝试反序列化的消息嵌套深度超过深度限制,反序列化将会失败。