快速的Python/Jython进程间通信?

14 投票
5 回答
3679 浏览
提问于 2025-04-15 13:04

我想做的就是通过套接字进行一些远程过程调用(RPC)。我有一个用Jython 2.5运行的服务器,负责一些后台工作。我需要从一个用CPython运行的Django前端服务器发起一些调用。我一直在努力尝试实现进程间通信(IPC),但一直没有成功。

我尝试过的东西有:

  • Apache Thrift没有正式的版本,只有一些快照。我想用一些稳定的东西。
  • JSON-RPC听起来不错,应该可以通过套接字运行,但实际上大多数实现似乎只能在HTTP上工作。HTTP的开销正是我想避免的。
  • Protocol Buffers其实只是一个序列化协议。根据我的了解,protobuf提供了RPC的接口生成,但只是接口。实际编写所有连接代码还是用户自己来做。如果我必须使用套接字,那我就用JSON来序列化。这样更简单,而且速度更快
  • Pyro在Jython作为服务器时工作不正常,似乎有套接字超时的问题。我已经给邮件列表发了消息。
  • pysage,消息传递真不错!但它需要Python 2.6或者处理模块(这个有编译扩展)。而Jython是2.5,不支持编译扩展。
  • Candygram是pysage的一个有趣替代品,但据我所知,它没有维护。我甚至没有尝试过在Jython上使用它。有人有经验吗?
  • Twisted Perspective Broker在Jython上也不工作。

我知道用XML-RPC来做这件事会很简单,这让我更烦躁。我想避免HTTP的开销,但同时我真的不想深入到套接字的底层去实现自己的协议。如果我这样做,肯定会出错。

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

5 个回答

2

我最喜欢的是.. zeroc的ice

6

你有没有考虑过Hessian呢?简单来说:

Hessian是一种二进制网络服务协议,它让网络服务变得更容易使用,不需要一个庞大的框架,也不需要再去学习一堆复杂的协议。因为它是二进制协议,所以特别适合发送二进制数据,不需要额外添加附件来扩展协议。

它有Python客户端和Java服务器(还有其他的)。

更新:如果你完全不想用HTTP,那为什么不直接用SocketServerpickle呢?这样需要的协议很简单,不容易出错。你可以发送和接收带有长度前缀的序列化字符串。

5

使用套接字(sockets)怎么样?可以借助 asyncoreasynchat 来实现。

这里有一些链接:

撰写回答