我正在研究使用 Google Protobuffers 进行增量消息传递。这意味着我只想发送域对象的更改值。
但这暴露了用于此目的的协议(protocol)的问题。我可以很容易地忽略没有改变的属性,这将为我们提供一个紧凑的信息。
但是那些将值从 _something_
更改为 null
的属性呢?在 Protocol Buffer 中无法区分这两种情况。
其他人在这里做了什么?我正在寻找几个不同的解决方案:
为所有对象添加一个元属性,即一个int数组。如果任何属性应更改为 null,请在此数组中包含字段编号。如果没有属性发生变化,则元属性将被忽略,并且不会占用消息中的带宽。
添加一个元属性,它是位掩码,但工作方式类似于选项 1 中提到的数组。不过,这可能让客户更难理解。
使用我尚未找到的标准方法。
周杰伦
最佳答案
Protobuf 3 不是很适合这个。但是在 protobuf 2 中,您可以拥有一个存在但值为 null 的字段。
因为 protobuf 2 不会很快消失,我建议只将它用于此类目的。
关于serialization - 将 google protobuf 用于增量消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45671075/