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)

如果您嘗試反序列化巢狀深度超過深度限制的訊息,反序列化將失敗。