节俭vs协议缓冲区
我已经使用PB了一段时间了,但是,Thrift一直在我的脑海里。
节俭的主要优点,正如我所看到的那样:
- 本机集合(即vector,集合等)与PB重复提供类似的function,但不太相似(除非您深入到文档所述的“不应该在大多数情况下需要”的RepeatedField,否则没有迭代器)。
- 提供了一个体面的RPC实现,而不是只是挂钩插入自己的。
- 更多官方支持的语言(PB提供对Java,C ++,Python的“官方”支持)
节俭的缺点:
- RPC的实现意味着我不能在我自己的(例如)encryption/身份validation层顶部插入。
- Windows支持似乎不是很好。
- 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。
您需要详细说明您的用例。 否则这是“哪个更好,汽车还是卡车?” 题。