通用二进制协议

6
我正在寻找适合我下一个分布式应用程序的协议中间件。在过去几天中,我已经找到了几个规范,想知道是否错过了重要的规范?它应该是二进制协议,支持RPC,并且可以选择在不同语言中拥有开源实现。以下是我发现的协议列表:
  • CORBA
  • ICE
  • AMQP
  • Thrift
这是被排除的协议列表:
  • 基于XML的协议,因为它们是基于文本的(例如XML-RCP,SOAP,手动编写等)
  • Protocol Buffers(封闭源代码)
  • COM(仅限Windows)

它必须是二进制的原因是什么? - Skizz
XML可以使用更节省空间的二进制格式进行编码,有关选项,请参见http://en.wikipedia.org/wiki/Binary_XML。 - xahtep
通信的一部分可能会在单个主机上的进程之间进行。 XML(即使是压缩的XML)会浪费大量的CPU时间。 - soulmerge
1
确实,它会消耗更多的CPU时间,但你确定你是受到CPU时间限制吗?你是否真的发现了问题,还是只是猜测,因为听起来你仍在设计系统。 - Skizz
9个回答

14

协议缓冲区项目肯定不是闭源的。

您对哪种语言/平台感兴趣?

请注意,尽管协议缓冲区中存在存根RPC支持,但Google并未发布其实际的RPC层,因此您需要自己提供。鉴于基本上您会传递请求消息并返回响应消息,将其覆盖在现有协议(例如HTTP POST)之上并不是那么难。


8

我不认为Protocol Buffers是闭源的。该页面暗示了不同的情况,并提供了源代码下载。


3

为了完整起见,我想补充一下,虽然可能不是最佳选择,但有一种XML二进制编码


3
我建议您重新考虑使用Google Protocol Buffers。对于所有主要平台,包括由Google自己发布的C++/Java/Python实现,都有许多开源实现。
正如Jon Skeet在上面提到的那样,PB规范并没有定义RPC模型,但使用PB定义自己的RPC非常容易。
或者,您可以看一下ASN.1。有大量应用程序使用ASN.1。

2

Joe Armstrong的UBF似乎并没有受到广泛关注,但它具有优雅的设计并满足您的要求。


2
你可以看一下ASN.1
它用于在许多其他协议(例如SNMP,LDAP)中编码和传输二进制数据,尽管ASN.1本身不定义传输协议。

它甚至可以用于进一步编码XML:http://java.sun.com/developer/technicalArticles/xml/fastinfoset/ - xahtep


0
我建议尝试使用RabbitMQ AMQP,并使用Protocol Buffers、XML或其他数据格式,例如JSON。除了相对简单且易于入门外,这还可以让您混合和匹配RPC和异步发布订阅样式,并在语言、协议和平台之间具有良好的分布。但它可能不适合您的问题——这完全取决于您要做什么!祝福,alexis

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接