繁体   English   中英

表示流中重复数据的正确方法

[英]Correct way to represent repeated data in stream

关于如何支持repeated消息的任何建议? 具体来说,如果这些消息都是一种类型。 在JSON中,这些实际上是一个数组。 就我而言,我并不在乎索引,但这并不是说数组类型对protobuf不会有用。 我已经考虑过以下方法,但是我不喜欢这种折衷方法。 阅读Google文档尚不清楚哪种方法适用于集合。

  1. 使用任何现有消息,只有一堆空字段

    您可以使用现有类型,仅包含所需的重复消息集合。 因此,如果用户消息类型重复了照片消息类型,请发送一个空的用户,除了“照片收集”字段外什么都不要。

  2. 创建包装器类型

    这是#1的工作,但不要使用现有的类型,而是创建一个新的类型。 这有点干净,因为它是显式的,并且不使用空字段。 仍然有消息输入。 在照片的情况下,这将是带有重复的照片消息字段的ArrayOfPhotos消息。

  3. 使用定界流

    我还没有尝试过这种方法,所以不太确定,但是protobuf支持定界流。 这看起来很酷,但是我想它的缺点是打字强度较低。 流可能包含不同消息类型的抓包。

    尽管此选项不需要额外的消息类型,但似乎确实有好处。

    在照片的情况下,这将是分隔的照片消息,但同样,您似乎也可以在其中添加用户消息。

听起来好像您在尝试询问顶级数据是数组而不是记录时该怎么做。 (从您的问题中并不能完全清楚您是否正在询问顶级人员,但否则我将无法理解该问题。)

要问自己的问题是:

  1. 有一天,您是否有可能要向此消息添加一些未附加到任何对象的辅助数据? 例如,也许您的照片清单有一天会附上相册名称。 在这种情况下,您肯定要使用解决方案2,因为它为您提供了以后添加其他字段而又不会弄乱某些现有消息类型的灵活性。
  2. 客户端或服务器必须将整个数据集保存在内存中并一次解析/序列化会是一个问题吗? 这是单个消息的要求。 例如,如果您要发送1GB的照片,则可能希望每个端点一次能够处理一张或几张照片。 在这种情况下,您当然需要解决方案3。

我不建议在任何情况下都使用解决方案#1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM