serialization - 将 google protobuf 用于增量消息

标签 serialization null protocol-buffers delta

我正在研究使用 Google Protobuffers 进行增量消息传递。这意味着我只想发送域对象的更改值。

但这暴露了用于此目的的协议(protocol)的问题。我可以很容易地忽略没有改变的属性,这将为我们提供一个紧凑的信息。

但是那些将值从 _something_ 更改为 null 的属性呢?在 Protocol Buffer 中无法区分这两种情况。

其他人在这里做了什么?我正在寻找几个不同的解决方案:

  1. 为所有对象添加一个元属性,即一个int数组。如果任何属性应更改为 null,请在此数组中包含字段编号。如果没有属性发生变化,则元属性将被忽略,并且不会占用消息中的带宽。

  2. 添加一个元属性,它是位掩码,但工作方式类似于选项 1 中提到的数组。不过,这可能让客户更难理解。

  3. 使用我尚未找到的标准方法。

周杰伦

最佳答案

Protobuf 3 不是很适合这个。但是在 protobuf 2 中,您可以拥有一个存在但值为 null 的字段。

因为 protobuf 2 不会很快消失,我建议只将它用于此类目的。

关于serialization - 将 google protobuf 用于增量消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45671075/

相关文章:

ios - `NSBundle.mainBundle().URLForResource` 总是返回 `nil`

java - 如果下一个标签位于新行上,XmlPullParser 读取 null

go - 使用 google.protobuf.Timestamp 在 Go 中解析具有时区偏移的日期时间戳

java - 我可以在 protobuf 中定义一个常量字符串吗?

python - 除了 to_pickle 之外,序列化 DataFrame 最快的方法是什么?

Symfony 3.2 检测到循环引用(配置限制 : 1)

mysql搜索与空值不一致

java - 如何使用 java 反射创建 protobuf 实例?

serialization - $(this).serialize() -- 如何添加值?

java - 使用回调在 DialogFragment 中传回数据(android)