【问题标题】:fast-ish python/jython IPC?快速的python/jython IPC?
【发布时间】:2010-11-12 21:50:35
【问题描述】:

我想做的就是通过套接字进行一些 RPC 调用。我有一台运行 jython 2.5 的后端服务器。我需要从在 CPython 上运行 Django 的前端服务器进行一些调用。我一直在努力争取任何形式的 IPC。

我尝试过的事情清单:

  • Apache Thrift 没有任何实际版本,只有快照。我想使用一些稳定的东西。
  • JSON-RPC 很有趣,它应该能够在套接字上运行,但实际上大多数 implementations 似乎只能在 HTTP 上运行。 HTTP 开销正是我想要避免的。
  • Protocol Buffers 实际上只是一个序列化协议。从我收集的内容来看,protobuf 为 RPC 提供了接口生成,但它只是接口。实际上编写所有连接代码取决于用户。如果我将无法使用套接字,我将只使用 JSON 进行序列化。更简单,faster
  • Pyro 无法将 Jython 作为服务器正常工作。某种套接字超时问题。我已向邮件列表发送了一条消息。
  • pysage 是的消息传递!只有它需要 python 2.6 或处理模块(已编译扩展)。 Jython 是 2.5 版,不允许编译扩展。
  • Candygram 是 pysage 的一个有趣的替代品,但据我所知,它没有维护。我什至没有用 Jython 尝试过。有什么经验吗?
  • Twisted Perspective Broker Twisted 不适用于 Jython。

我知道用 XML-RPC 做这件事会很容易,这让我更加暴躁。我想避免 HTTP 的开销,但同时我真的不想用套接字来实现我自己的协议。如果我这样做,我会做错。

有什么想法吗?我可能会哭大约 20 分钟,然后就使用 XML-RPC。

【问题讨论】:

  • 顺便说一句,我刚刚找到了我的问题的解决方案:bert-rpc.org

标签: python ipc jython twisted rpc


【解决方案1】:

你考虑过Hessian吗?来自简介:

Hessian 二进制 Web 服务 协议使 Web 服务可用 无需大型框架, 并且没有学习另一个 协议的字母汤。因为它 是一个二进制协议,它是 非常适合发送二进制数据 无需任何扩展 带有附件的协议。

它有 Python 客户端和 Java 服务器(以及更多)。

更新:如果您不喜欢 HTTP,为什么不直接使用 SocketServerpickle?不需要太多的协议,很难出错。发送/接收带有长度前缀的腌制字符串。

【讨论】:

  • Hessian 使用 HTTP,我想避免。
【解决方案2】:

您是否考虑过使用 CORBA?它快速、便携且面向对象...

我只在 Java 端使用过它(我认为您可以使用纯 Java 代理,而 Jython 没有问题),并且使用 IIOP,您应该能够与 CPython 客户端进行互操作。

【讨论】:

  • 很可能会这样。现在我们的界面发展得非常快,而且 CORBA 似乎太重了。但是,是的,我想到了这个想法。
  • 我不认为它太重量级,就性能或内存占用而言,它也用于嵌入式系统......如果你的意思是部署它可以部署的所有服务可能太麻烦了提供,你可能不会使用,是的,那么你是对的^_^
【解决方案3】:

asyncoreasynchat 的帮助下使用套接字怎么样?

一些链接:

【讨论】:

  • 其他一些异步框架:Twisted、gevent、Eventlet、Syncless、Concurrence。
【解决方案4】:

我觉得最有趣的两个:

  • GearmanPython bindings。现在它已经用 C(最初是 perl)重写了,速度快了很多。它在生产中使用(尽管我无法指出生产中使用的 python 绑定的任何示例)。它对 MySQL 和 Postgresql 有非常有趣的(对我而言)接口。最后,来自 Django 的 Jacob Kaplan-Moss 的todays tweet

  • RabbitMQ 虽然因为它只是一个消息队列,你仍然必须序列化你自己的消息,除非你也使用celery

【讨论】:

  • 目前我们正在使用carrot/RabbitMQ 来异步调用这个服务器,但现在我们想进行同步调用。我确信我可以在队列中构建它,但是如何以一种好的方式做到这一点并不明显。
【解决方案5】:

我的最爱.. zeroc's ice

【讨论】:

  • Ice 看起来确实很有趣。我们不是一个开放的项目,所以我会研究一下商业许可的成本。
猜你喜欢
  • 1970-01-01
  • 2012-03-04
  • 2016-02-12
  • 2012-11-01
  • 1970-01-01
  • 2011-08-11
  • 2011-05-14
  • 2016-04-02
  • 1970-01-01
相关资源
最近更新 更多