Python IPC - Twisted,RabbitMQ,

Woj*_*ilo 6 python ipc twisted rabbitmq zeromq

我想在Python中创建2个应该相互通信的应用程序.其中一个应用程序应该像服务器一样,第二个应该是客户端的GUI.它们可以在同一系统(在同一台机器上)或远程和不同设备上运行.

我想问你,我应该使用哪种技术 - 一种AMQP消息(如RabbitMQ),Twisted如服务器(或Tornado)或ZeroMQ,并将应用程序连接到它.将来我希望有一些认证等.

我已经阅读了很多问题和文章(比如这一个:为什么我们需要使用rabbitmq),很多人都在说"兔子和扭曲是不同的".我知道他们是.我真的很想知道这些差异,以及为什么这些解决方案中的一个在这种情况下优于另一个.

编辑: 我想用以下要求:

  1. 一次将连接多个用户 - 我认为将有1-10个用户连接到同一个程序,他们将协同工作
  2. 数据发送是"消息"告诉用户做了什么 - 类似于远程调用(但不关注它,因为GUIS可以用不同的语言编写,因此消息将类似于json信息).
  3. 系统应允许协作工作 - 因此它应尽可能具有互动性.(当用户输入某些内容或执行某些操作时,将始终发送数据).

另外,我很想知道为什么一个解决方案不仅在这个特定情况下会比另一个解决方案更好.

Ada*_*ent 10

Twisted用于通过Reactor Pattern为您提供异步网络来解决C10k网络问题.它也很方便,因为它提供了很好的并发抽象,因为Python中的线程/并发并不像Erlang那么容易.因此,有些人使用Twisted来分派工作任务,但这不是它的设计目的.

RabbitMQ基于消息队列模式.它关于可靠的消息传递,而不是关于网络.我强调可靠的部分,因为有许多不同的异步网络框架(例如Vert.x)提供消息传递(也称为pub/sub).

通常情况下,大多数人将这两种模式结合在一起,以创建一个"消息总线",可以满足各种网络需求,同时避免不必要的网络阻塞,并实现出色的集成和可扩展性.

"消息队列"与网络"反应器循环"如此顺利的原因是您不应该阻塞反应器循环,因此您必须将阻塞工作分派给其他进程(线程,lwp,单独的机器进程,队列等) ..).在实践中,最简洁的方法是分发消息传递.

根据您的要求,听起来您应该使用异步网络,如果您希望结果立即显示和扩展,但您可能可以使用一个简单的系统,只需轮询,因为您只有少数客户端.那么问题是总用户数(Twisted)是多少?您希望更新的可靠性(RabbitMQ)?最后你想要你的架构是语言和平台不可知的......也许你想稍后使用Node.js(专注于消息队列而不是异步网络......即RabbitMQ).我个人会看看Vert.x,它允许你用Python编写.