节俭vs协议缓冲区

我已经使用PB了一段时间了,但是,Thrift一直在我的脑海里。

节俭的主要优点,正如我所看到的那样:

  1. 本机集合(即vector,集合等)与PB重复提供类似的function,但不太相似(除非您深入到文档所述的“不应该在大多数情况下需要”的RepeatedField,否则没有迭代器)。
  2. 提供了一个体面的RPC实现,而不是只是挂钩插入自己的。
  3. 更多官方支持的语言(PB提供对Java,C ++,Python的“官方”支持)

节俭的缺点:

  1. RPC的实现意味着我不能在我自己的(例如)encryption/身份validation层顶部插入。
  2. Windows支持似乎不是很好。
  3. PB似乎有,如果不是更好,更可访问的文件。

中性:

  • Windows上的.lib / .dll的大小(Thrift)。
  • 在Windows上大尺寸的.lib(PB,但它确实提供了一个明显更小的–lite)。
  • 速度明智,他们似乎都是相似的。

我还没有准备好冒险,转而使用Thrift,任何人都可以为我提供更多的优点/缺点,或者有其他原因。

谢谢!

正如我所说的“节俭与协议缓冲区的最大差异?” 话题 :

提到节俭与Protobuf与JSON比较 :

  • C ++,Python,Java支持Protobuf和Thrift。
  • 对其他语言(包括Lua,Matlab,Ruby,Perl,R,Php,OCaml,Mercury,Erlang,Go,D,Lisp)的Protobuf支持可以作为第三方插件 (顺便说一句, 这是SWI-Prolog的支持 )。
  • Protobuf有更好的文档和大量的例子。
  • Protobuf对象较小
  • 解除“optimize_for = SPEED”时,Protobuf会更快
  • Thrift集成了RPC实现,而对于Protobuf RPC解决scheme是分开的,但是可用 (如Zeroc ICE )。
  • Protobuf是在BSD风格的许可下发布的
  • Thrift是在Apache许可下发布的

另外,这些解决scheme还有很多有趣的附加工具可供select。 以下是Protobuf的示例: Protobuf-wireshark , protobufeditor 。

您可能首先需要分析您的需求:

你需要一个协议不可知的格式? 例如,你想实现一个自定义协议还是需要100%的可移植性? 在这种情况下使用PB。

如果您对Thrift的默认协议没有问题,并且您需要一个协议,无论如何,请使用Thrift。

希望这可以帮助。

我们的项目的主要原因是使用Thrift over协议缓冲区,协议缓冲区不会自动生成完整的RPC服务器,现有的PB解决scheme似乎都相当不稳定。 只是我的$ 0.02。

您需要详细说明您的用例。 否则这是“哪个更好,汽车还是卡车?” 题。