它们是协议缓冲区的大小限制吗?

时间:2018-09-13 09:34:17

标签: javascript node.js client-server protocol-buffers

我正在将数据从客户端传递到服务器,反之亦然。我想知道它们是协议缓冲区的任何大小限制。

1 个答案:

答案 0 :(得分:0)

引用official source

  

协议缓冲区不适用于处理大消息。根据一般经验,如果您要处理每兆字节以上的消息,则可能是时候考虑另一种策略了。

     

也就是说,协议缓冲区非常适合处理大型数据集中的单个消息。通常,大型数据集实际上只是小片段的集合,其中每个小片段可能都是结构化的数据。尽管协议缓冲区不能一次处理整个集合,但使用协议缓冲区对每个片段进行编码可以极大地简化您的问题:现在您所需要的只是处理一组字节字符串而不是结构。

     

协议缓冲区不包含对大型数据集的任何内置支持,因为不同的情况需要不同的解决方案。有时,只需要一个简单的记录列表,而其他时候,您可能希望更像一个数据库。每个解决方案都应作为一个单独的库进行开发,这样只有那些需要它的人才需要付费。


据我了解protobuf encoding,以下内容适用:

    未指定64位以上的
  • varint,但是给出了their encoding works varint位长不受线格式限制的情况(varint由多个1xxxxxxx组组成,并以a结尾单个0xxxxxxx是完全有效的-我想没有实际的实现支持大于64位思想的varint)

  • 鉴于上述varint编码属性,应该可以对任何消息长度进行编码(因为内部使用varint编码以长度分隔的字段的长度,而其他字段类型是varint或具有固定长度)

  • 您可以通过重复单个重复的字段ad-absurdum来构造任意长的有效protobuf消息-解析器应该非常满意,只要它具有足够的内存来存储值(甚至还有提供回调的解析器)字段值,从而减少了内存消耗,例如nanopb

(请确认我的想法)