Protobuf3 更新消息类型

如果现有的消息类型不满足你的所有需求——例如,你希望消息格式有一个额外的字段——但是你仍然希望使用用旧格式创建的代码,别担心!在不破坏任何现有代码的情况下更新消息类型非常简单。请记住以下规则:

不要更改任何现有字段的字段编号。

如果添加新字段,任何使用“旧”消息格式由代码序列化的消息仍然可以被新生成的代码解析。您应该记住这些元素的默认值,以便新代码可以与旧代码生成的消息能够正确交互。同样,新代码创建的消息可以被旧代码解析:旧二进制文件在解析时忽略新字段。

未知字段是格式良好的协议缓冲区序列化数据,用于表示解析器无法识别的字段。例如,当旧二进制解析新二进制发送的带有新字段的数据时,这些新字段将成为旧二进制中未知的字段。

最初,proto3消息在解析过程中总是丢弃未知字段,但是在3.5版中,我们重新引入了未知字段的保留以匹配proto2行为。在3.5及更高版本中,未知字段会在解析期间保留,并包含在序列化输出中。

只要更新的消息类型中不再使用字段号,就可以删除字段。您可能希望重命名该字段,也许添加前缀 "OBSOLETE_",或者保留字段号,以便将来你.proto不会意外地被其他用户重复使用。

int32, uint32, int64, uint64和bool都是兼容的——这意味着您可以将字段从这些类型中的一种更改为另一种类型,而不破坏向前或向后兼容性。如果从不适合相应类型中的字段中解析出一个数字,你将会得到与用c++将该数字转换为该类型相同的效果(例如,如果int64数字被解析为int32,它将被截断为32位)。

sint32 和sint64 彼此兼容,但与其他整数类型不兼容。只要字节是有效的UTF - 8,字符串和字节是兼容的。

如果字节包含消息的编码版本,则嵌入消息与字节兼容。

fixed32与sfixed32兼容, fixed64与sfixed64兼容。

enum与int32、uint32、int64和uint64在电线格式条款兼容(请注意,如果这些值不匹配,它们将被截断)。然而,请注意,当消息被反序列化时,客户端代码可能会以不同的方式对待它们:例如,无法识别的proto3枚举类型将保留在消息中,但是当消息被反序列化时,这是如何表示的取决于语言,int字段总是保留其值。

将单个值更改为新值的成员是安全的,并且是二进制兼容的。如果您确定没有代码一次设置多个字段,将多个字段移动到新的字段可能是安全的,将任何字段移动到现有字段中是不安全的。

八.Protobuf3更新消息类型(添加新的字段)的更多相关文章

  1. gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型

    当你第一次定义Protocol Buffer的消息的时候,你肯定会给消息设定一套规则需求.但是随着时间的推进,你的业务可能会发生了变化,与此同时,你的Protocol Buffer消息类型的需求也会随 ...

  2. Language Guide (proto3) | proto3 语言指南(七)更新消息类型

    Updating A Message Type - 更新消息类型 如果现有的消息类型不再满足您的所有需要(例如,您希望消息格式有一个额外的字段),但是您仍然希望使用用旧格式创建的代码,不要担心!在不破 ...

  3. ASP.NET Core 中文文档 第二章 指南(4.8)添加新的字段

    原文 Adding a New Field 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).高嵩(Jack) 在这个章节你将使用 Entity Framework ...

  4. EF中如何为表添加新的字段和映射

    首先先了解一下ef生成的模型edmx的代码,传送门:http://www.cnblogs.com/yushengbo/p/4807715.html 一.添加新的字段 例子就用我现在项目的这个吧,首先在 ...

  5. SQLite添加新的字段

    通过alter添加新的字段SQL语句 "ALTER TABLE 'DiHKChatMessage' ADD 'phoneNum' varchar"; 但是如果这个字段已经存在的话, ...

  6. mssql sqlserver 给已存在表添加新的字段及字段备注的方法

    转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...

  7. 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

    (注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...

  8. js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素

    JS定义了一个json数据var test={name:"name",age:"12"};需要给test再添加一个字段,需要什么办法,可以让test的值为{na ...

  9. Qt+QGIS二次开发:向shp矢量图层中添加新的字段

    添加一个新的字段到shp文件中,并且从Excel里导入数据到该字段.原shp文件里的字段ID应该与Excel里的字段ID一一对应才能正确的导入.下图分别是shp的字段和Excel的字段 将class字 ...

随机推荐

  1. Python界面常用GUI包

    作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发任务,这时候我们就需要一些界面库来帮助我们快速搭建界面,python的界面库很多,我认识的并不多,这里只列出几种我认识的 1.tkin ...

  2. 在webstorm里使用git

    1,设置git 打开webstorm软件,找到file下面的settings(设置) 打开设置对话窗,找到version control的子级目录git,路径path输入git安装目录下bin目录里的 ...

  3. tcpdump网络调试

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  4. PAT(B) 1065 单身狗(Java:17分,C:25分)

    题目链接:1065 单身狗 (25 point(s)) 题目描述 "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式 ...

  5. shell中通过eval执行一个字符串命令

    #!/bin/bash echo "Switch Directory : /home/pktgen-2.9.0" dir="/home/pktgen-2.9.0" ...

  6. [洛谷P4213]【模板】杜教筛(Sum)

    题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}- ...

  7. python3.7 64位中安装pygame1.9.3

    1.我是用pip命令来安装的,首先,打开cmd,输入pip,检查电脑中有没有安装这个插件(一般python2.7以上自带pip工具) 2.更新pip工具的命令:python -m pip instal ...

  8. Java调用WebService方法总结(6)--XFire调用WebService

    XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...

  9. elasticsearch授权访问

    1.search guard插件 https://www.cnblogs.com/shifu204/p/6376683.html 2.Elasticsearch-http-basic 不支持es5,忽 ...

  10. 博客使用 utterances 作为评论系统

    utterances 是一款基于 GitHub issues 的评论工具. 相比同类的工具 gitment.gitalk 以及 disqus 评论工具,优点如下: 极其轻量 加载非常快 配置比较简单 ...