gpt4 book ai didi

protocol-buffers - 我可以停用必需的 protobuf 字段吗?

转载 作者:行者123 更新时间:2023-12-03 23:24:42 25 4
gpt4 key购买 nike

我有一个客户端 - 服务器应用程序,其中服务器将 protobuf 格式的序列化对象传输到客户端,我想退休 required field 。不幸的是,我无法同时更改客户端和服务器以使用新的 .proto定义。

如果我换一个 required字段为 optional ,但仅限于对消息进行序列化的代码(即反序列化代码没有重新构建,仍然认为是required字段),是否可以继续发布可以反序列化的消息只要我为现在填充一个值- optional field ?

(这样做似乎很好,至少对于我尝试过的一些琐碎案例(仅使用 Java),但我感兴趣的是它是否是一种普遍合理的方法,以及是否存在任何边缘案例等我应该担心)。

动机 : 我的目标是退休required客户端-服务器应用程序中的字段,其中服务器发布由客户端反序列化的消息。我的预期方法是:

  • 更改 required字段到 optional在行李箱上。
  • 如果需要部署新的服务器代码(对于不相关的功能/修复),请确保在消息中继续填充可选字段。
  • 为所有客户逐步部署更新的代码(这需要时间,因为它需要其他团队参与他们自己的发布计划)
  • 确认所有客户端都已更新。
  • 开始停用(即不填充)可选字段。
  • 最佳答案

    根据encoding format documentation ,无论是否需要字段都不会在序列化字节流本身中进行编码。即 optionalrequired在编码的序列化消息中没有区别 .

    我已经在实践中确认了这一点,使用 Java 生成的代码,通过将序列化消息写入磁盘并比较输出 - 使用包含所有支持的原始类型以及代表其他类型的字段的消息。

    关于protocol-buffers - 我可以停用必需的 protobuf 字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com