我正在将数据从客户端传递到服务器,反之亦然。我想知道它们是协议缓冲区的任何大小限制。
答案 0 :(得分:0)
协议缓冲区不适用于处理大消息。根据一般经验,如果您要处理每兆字节以上的消息,则可能是时候考虑另一种策略了。
也就是说,协议缓冲区非常适合处理大型数据集中的单个消息。通常,大型数据集实际上只是小片段的集合,其中每个小片段可能都是结构化的数据。尽管协议缓冲区不能一次处理整个集合,但使用协议缓冲区对每个片段进行编码可以极大地简化您的问题:现在您所需要的只是处理一组字节字符串而不是结构。
协议缓冲区不包含对大型数据集的任何内置支持,因为不同的情况需要不同的解决方案。有时,只需要一个简单的记录列表,而其他时候,您可能希望更像一个数据库。每个解决方案都应作为一个单独的库进行开发,这样只有那些需要它的人才需要付费。
据我了解protobuf encoding,以下内容适用:
varint,但是给出了their encoding works varint位长不受线格式限制的情况(varint由多个1xxxxxxx
组组成,并以a结尾单个0xxxxxxx
是完全有效的-我想没有实际的实现支持大于64位思想的varint)
鉴于上述varint编码属性,应该可以对任何消息长度进行编码(因为内部使用varint编码以长度分隔的字段的长度,而其他字段类型是varint或具有固定长度)
您可以通过重复单个重复的字段ad-absurdum来构造任意长的有效protobuf消息-解析器应该非常满意,只要它具有足够的内存来存储值(甚至还有提供回调的解析器)字段值,从而减少了内存消耗,例如nanopb)
(请确认我的想法)