Proto 限制
涵蓋了 proto 模式中支援的元素數量限制。
本主題記錄了 proto 模式中支援的元素(欄位、列舉值等)數量的限制。
這些資訊是許多工程師發現的限制集合,但並非詳盡無遺,並且在某些方面可能不準確/過時。當您在工作中發現限制時,請將其貢獻到此文件中以幫助他人。
欄位數量
所有訊息的欄位數量都限制在 65,535 個。
僅包含單一 proto 欄位(如布林值)的訊息
- ~2100 個欄位 (proto2)
- ~3100 個欄位 (proto3 不使用可選欄位)
由單一欄位(如布林值)擴充套件的空訊息
- ~4100 個欄位 (proto2)
Proto3 不支援擴充套件。
要測試此限制,請建立一個包含超過上限數量欄位的 proto 訊息,並使用 Java proto 規則編譯。此限制源於 JVM 規範。
列舉中的值數量
最低限制是 Java 中的 ~1700 個值。其他語言有不同的限制。
訊息總大小
任何序列化形式的 proto 都必須小於 2GiB,因為這是所有實現支援的最大大小。建議限制請求和響應的大小。
Proto 反序列化深度限制
- Java:100
- C++:100
- Go:10000(計劃將其減少到 100)
如果您嘗試反序列化巢狀深度超過深度限制的訊息,反序列化將失敗。