他们是协议缓冲区的任何大小限制?

问题描述 投票:0回答:1

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

javascript node.js client-server protocol-buffers
1个回答
1
投票

引用official source

协议缓冲区不是为处理大型消息而设计的。作为一般经验法则,如果您正在处理大于每兆字节的消息,则可能需要考虑替代策略。

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

协议缓冲区不包括对大型数据集的任何内置支持,因为不同的情况需要不同的解决方案。有时一个简单的记录列表会做,而有时你可能想要更像数据库的东西。每个解决方案都应该作为一个单独的库开发,以便只有需要它的人才需要支付成本。


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

  • 没有指定64位以上的varint,但是给出their encoding works varint位长度不受有线格式的限制(由几个1xxxxxxx组组成的varint完全有效 - 我认为没有实际的实现支持大于64位思考的变量)
  • 给定上面的varint编码属性,应该可以对任何消息长度进行编码(因为varints在内部用于编码长度分隔字段的长度,而其他字段类型是varint或具有固定长度)
  • 只需重复一个重复的字段ad-absurdum就可以构造任意长的有效protobuf消息 - 解析器应该非常高兴,只要它有足够的内存来存储值(甚至有解析器为字段值提供回调,从而放松内存消费,例如0xxxxxxx

(请验证我的想法)

© www.soinside.com 2019 - 2024. All rights reserved.