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

最佳答案

引用official source


  协议缓冲区不适用于处理大消息。根据一般经验,如果您要处理每条大于一兆字节的消息,可能是时候考虑另一种策略了。
  
  也就是说,协议缓冲区非常适合处理大型数据集中的单个消息。通常,大型数据集实际上只是小片段的集合,其中每个小片段可能都是结构化的数据。即使协议缓冲区不能一次处理整个集合,使用协议缓冲区对每个片段进行编码也大大简化了您的问题:现在,您所需要做的只是处理一组字节字符串,而不是一组结构。
  
  协议缓冲区不包含对大型数据集的任何内置支持,因为不同的情况要求使用不同的解决方案。有时,只需要一个简单的记录列表,而其他时候,您可能希望更像一个数据库。每个解决方案都应作为一个单独的库进行开发,以便只有那些需要它的人才需要付费。




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


未指定64位以上的varint,但是给出their encoding works varint位长不受线格式的限制(由几个1xxxxxxx组组成并由单个0xxxxxxx终止的varint完全有效-我假设没有实际的实现支持大于64位思想的varint)
给定上述varint编码属性,应该可以对任何消息长度进行编码(因为内部使用varint来编码长度分隔字段的长度,而其他字段类型是varint或具有固定长度)
您可以通过重复单个重复的字段ad-absurdum来构造任意长的有效protobuf消息-解析器应该非常满意,只要它有足够的内存来存储值(甚至解析器都可以提供字段值的回调,从而放松内存)消费,例如nanopb


(请确认我的想法)

关于javascript - 它们是 Protocol Buffer 的大小限制吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52310808/

10-11 20:30