【问题标题】:What is the current choice for doing RPC in Python? [closed]当前在 Python 中进行 RPC 的选择是什么? [关闭]
【发布时间】:2010-12-25 04:44:20
【问题描述】:

实际上,我已经对 Pyro 和 RPyC 做了一些工作,但是 RPC 的实现比这两个要多。我们可以列出它们吗?

基于 Python 的原生协议:

具有大量底层协议的 RPC 框架:

基于 JSON-RPC 的框架:

肥皂:

基于 XML-RPC 的框架:

其他:

【问题讨论】:

  • 这真的取决于上下文。互联网?局域网?网站?分布式计算?快速原型?带宽?消息大小?
  • @silentghost:完成。我不喜欢默认设置“社区维基”,因为有时,我错了:) @ddaa:任何。我是在笼统地询问 RPC,如果它们在特定情况下有一些优点/缺点,请将它们添加到列表中。
  • 不久前我需要做“真正的”RPC(RFC 1050 类型),然后选择并没有给人留下太多印象,所以我最终不得不自己做大部分事情。如果有人对此有更好的选择,我很想听听。
  • 对于那些想要 Python-to-Python RPC 的人 - PyRo 4 最新版本不支持 SSL,但 PyRo 3 仍然支持 - 两者都是 Python,因此它们支持 Python 2、Python 3、PyPy、 Jython 和 IronPython。 RPyc 确实支持 SSL,而 Circuits 没有提到这一点。
  • 对于简单的应用程序,您可以考虑PyMQ,它支持通过 redis 或 posix IPC 进行同步 RPC。

标签: python rpc


【解决方案1】:

XML-RPC 是 Python 标准库的一部分:

【讨论】:

  • 为简单起见对 XML-RPC +1,甚至考虑到 SimpleXMLRPCServer 缺乏适当的错误处理。
  • “警告 xmlrpc.server 模块对恶意构造的数据不安全。”,因此它的用例非常有限。
  • @Equidamoid 如果您需要解析不受信任或未经身份验证的数据,请参阅docs.python.org/2/library/xml.html#xml-vulnerabilities
【解决方案2】:

有一些尝试让 SOAP 与 python 一起工作,但我没有对它进行太多测试,所以我不能说它是否好。

SOAPy 就是一个例子。

【讨论】:

  • 使用过大多数 SOAP 框架并自己实现了一个用于基于反射的 RPC,我的建议很简单——不要那样做。如果不需要跨语言通信+独立的接口描述+映射到自定义类,那么SOAP的复杂性只会让人头疼。即使您确实需要使用它,您也需要有经验才能知道哪个 SOAP 子集可以安全使用。
  • SOAP 通常是噩梦,尤其是在 Python 中。除非迫不得已,否则不要使用它。
  • 我在 SOAP 方面的有限经验与这里的其他 cmets 一致。 xmlrpc 经常做我需要的一切。
【解决方案3】:

也许是实现 SOAP 的 ZSI。我使用了存根生成器,它工作正常。我遇到的唯一问题是通过 HTTPS 进行 SOAP。

【讨论】:

    【解决方案4】:

    自从我提出这个问题后,我就开始使用python-symmetric-jsonrpc。相当不错,可以在python和非python软件之间使用,遵循JSON-RPC标准。但它缺少一些例子。

    【讨论】:

      【解决方案5】:

      你可以试试 Ladon。它同时提供多个 Web 服务器协议,因此您可以在客户端提供更大的灵活性。

      http://pypi.python.org/pypi/ladon

      【讨论】:

        【解决方案6】:

        我们正在开发Versile Python (VPy),这是一个新 ORB/RPC 框架的 python 2.6+ 和 3.x 实现。用于审查和测试的功能性 AGPL 开发版本是 available。 VPy 通过通用原生对象层 (code example) 具有类似于 PyRo 和 RPyC 的原生 python 功能。该产品专为实现Versile Platform 的独立于平台的远程对象交互而设计。

        完全披露:我为开发 VPy 的公司工作。

        【讨论】:

          【解决方案7】:

          您错过了omniORB。这是一个非常完整的 CORBA 实现,因此您还可以使用它与其他支持 CORBA 的语言进行对话。

          【讨论】:

            【解决方案8】:

            Apache Thrift 是 Facebook 开发的跨语言 RPC 选项。在套接字上工作,函数签名以独立于语言的方式在文本文件中定义。

            【讨论】:

            • Thrift 不支持 Python 3 还不支持,太可惜了
            • 个人评论:Thrift 是维护的噩梦。我还没有看到两个 Linux 发行版甚至使用类似的配置标志。不久前(当我从源代码构建 0.10.0 时),需要禁用大多数功能才能使其构建在“外来”系统上,如当前的 Ubuntu、Debian 或 Fedora。底层的数据类型更改使 C++ 的使用变得一团糟#ifdefs,并且在存在的 12 年中,他们无法说服自己他们的软件已准备好发布 1.0.0 版本。我喜欢支持的大量语言,但我认为这是它们的弱点:尝试做太多事情。
            • (我在我维护的一个中型 GNU 项目中使用 thrift。@Roberto,thrift 至少现在支持 Py3。)
            • 我真的鼓励人们真正思考你是否真的需要一个跨语言框架,从字面上尝试将 PHP 连接到 C++ 到 Java 到 Python 到 Erlang 到 Common从 Lisp 到 Haskell 到 Swift。出于某种原因,这些是不同的语言,Thrift 需要做出妥协以找到一个共同点。我认为绝大多数人实际上只需要连接 1 或 2 种不同的语言,更精简的框架会更好。
            猜你喜欢
            • 2013-09-04
            • 2010-09-05
            • 2013-08-20
            • 2020-04-27
            • 1970-01-01
            • 1970-01-01
            • 2010-09-10
            相关资源
            最近更新 更多