【问题标题】:general-purpose binary protocols通用二进制协议
【发布时间】:2012-05-03 14:47:29
【问题描述】:

我正在尝试为我的下一个分布式应用程序寻找合适的协议中间件。在过去的几天里,我找到了几个规格,想知道我是否错过了一个重要的规格?它应该是二进制协议,支持 RPC,并且可以选择具有不同语言的开源实现。这是我找到的协议列表:

  • CORBA
  • AMQP
  • 节俭

这是被解雇的协议列表:

  • 基于 XML 的协议,因为它们是基于文本的(XML-RCP、SOAP、手动等)
  • 协议缓冲区(闭源)
  • COM(仅限 Windows)

【问题讨论】:

  • 有什么理由必须是二进制的吗?
  • XML 可以以更节省空间的二进制格式编码,有关选项,请参阅en.wikipedia.org/wiki/Binary_XML
  • 部分通信可能发生在单个主机上的进程之间。 XML(甚至是压缩的 xml)会浪费大量的 CPU 时间
  • 没错,它确实会消耗更多的 CPU 时间,但您确定您的 CPU 时间有限吗?您是否真的发现了问题,或者您只是在猜测,因为听起来您仍在设计系统。

标签: protocols


【解决方案1】:

Protocol Buffers 项目绝对不是封闭源代码。

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

请注意,虽然在 Protocol Buffers 中有 stub RPC 支持,但 Google 尚未发布其实际的 RPC 层,因此您必须提供自己的。鉴于基本上您会传递请求消息并返回响应消息,因此将其分层到现有协议(例如 HTTP POST)上并不难。

【讨论】:

    【解决方案2】:

    我不认为Protocol Buffers 是封闭源代码。页面暗示不同,有源码下载。

    【讨论】:

      【解决方案3】:

      很可能不是最佳候选人,但为了完整起见,我想补充一下,有一个 binary encoding for XML

      【讨论】:

        【解决方案4】:

        我建议您重新考虑 Google 协议缓冲区。所有主要平台都有许多开源实现,包括 Google 自己发布的 C++/Java/Python。

        正如上面 Jon Skeet 所提到的,PB 规范没有定义 RPC 模型,但使用 PB 定义自己的 RPC 非常容易。

        或者,您可以查看 ASN.1。有大量使用 ASN.1 的应用程序。

        【讨论】:

          【解决方案5】:

          你可以看看ASN.1

          它用于在许多其他协议(例如 SNMP、LDAP)中编码和传输二进制数据,尽管 ASN.1 本身并没有定义传输协议。

          【讨论】:

          【解决方案6】:

          Joe Armstrong 的 UBF 似乎没有流行起来,但它以有品位的设计满足了您的要求。

          【讨论】:

            【解决方案7】:

            我建议尝试使用 RabbitMQ AMQP,并使用协议缓冲区、XML 或其他一些数据格式(例如 JSON)来尝试。除了相对简单和容易上手之外,这还允许您混合和匹配 RPC 和异步 pubsub 样式,并且可以很好地跨语言、协议和平台传播。但这可能不适合您的问题-这完全取决于您要做什么!干杯,亚历克西斯

            【讨论】:

              【解决方案8】:

              从 ZeroC 到 Ice 有一个补丁可以原生支持 Google Protocol Buffers。

              http://www.zeroc.com/labs/protobuf/

              【讨论】:

                【解决方案9】:

                【讨论】:

                  猜你喜欢
                  • 2012-01-21
                  • 1970-01-01
                  • 2023-04-11
                  • 1970-01-01
                  • 2010-09-17
                  • 1970-01-01
                  • 2015-08-16
                  • 2011-02-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多