Python IPC-Twisted、RabbitMQ、,

Python IPC-Twisted、RabbitMQ、,,python,ipc,twisted,rabbitmq,zeromq,Python,Ipc,Twisted,Rabbitmq,Zeromq,我想用Python创建两个应用程序,它们应该相互通信。其中一个应用程序的行为应该类似于服务器,第二个应用程序应该是客户端的GUI。它们可以在同一系统(在同一台机器上)上运行,也可以在不同的设备上远程运行 我想问您,我应该使用哪种技术—AMQP消息传递(如RabbitMQ)、Twisted服务器(或Tornado)或ZeroMQ并将应用程序连接到它。在未来,我想有一些身份验证等 我读过很多问题和文章(比如这篇:),很多人都在说“rabbitmq和twisted是不同的”。我知道他们是。我真的很想知

我想用Python创建两个应用程序,它们应该相互通信。其中一个应用程序的行为应该类似于服务器,第二个应用程序应该是客户端的GUI。它们可以在同一系统(在同一台机器上)上运行,也可以在不同的设备上远程运行

我想问您,我应该使用哪种技术—AMQP消息传递(如
RabbitMQ
)、
Twisted
服务器(或
Tornado
)或ZeroMQ并将应用程序连接到它。在未来,我想有一些身份验证等

我读过很多问题和文章(比如这篇:),很多人都在说“rabbitmq和twisted是不同的”。我知道他们是。我真的很想知道它们之间的区别,以及为什么在这种情况下,这些解决方案中的一个会优于另一个

编辑: 我希望使用它时满足以下要求:

  • 一次将有超过1个用户连接-我认为将有1-10个用户连接到同一个程序,他们将协同工作
  • 发送的数据是告诉用户所做的事情的“消息”——类似于远程调用(但不要关注这一点,因为GUI可以用不同的语言编写,因此消息将类似于json信息)
  • 该系统应允许协作工作,因此应尽可能具有交互性。(当用户键入某些内容或执行某些操作时,数据将一直发送)

  • 另外,我很想知道为什么一种解决方案比另一种更好,不仅仅是在这种特殊情况下。

    当有人告诉你Twisted和RabbitMQ不同时,是因为比较两者就像比较两个不同目标的东西

    Twisted是一个异步框架,就像Tornadao一样。RabbitMQ是一个消息队列系统。你不可能把每一个都比较清楚

    你应该把你的问题变成两个新问题,第一个是我应该用什么协议来沟通我的过程?答案可以用amqp、协议缓冲区等词来解释


    另一个问题是,我应该使用哪个框架来编写客户端和服务器程序?这里的答案可以归结为Twisted、Tornado等。

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

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

    大多数人通常会将这两种模式结合在一起,创建一个“消息总线”,它可以满足各种网络需求,而不需要不必要的网络阻塞,并且具有很好的集成性和可伸缩性

    “消息队列”与网络“反应器循环”配合得如此之好的原因是不应在反应器循环上阻塞,因此必须将阻塞工作分配给其他进程(线程、lwp、独立机器进程、队列等)。实际上,最干净的方法是分布式消息传递


    根据您的需求,如果您希望结果立即显示并可扩展,听起来您应该使用异步网络,但如果您只有少数几个客户端,您可能可以使用一个简单的系统进行轮询。所以问题是总共有多少用户(Twisted)?您希望更新交付的可靠性如何(RabbitMQ)?最后,您是否希望您的体系结构与语言和平台无关。。。也许您希望稍后使用Node.js(关注消息队列而不是异步网络…即RabbitMQ)。就我个人而言,我想看看哪一个允许您使用Python编写。

    您的要求是什么:1。客户数量(可能只有1?)2。要发送的数据量和类型3。您发送dataBTW的频率有多高,ZeroMQ没有实现AMQP。我不认为任何人在不了解任何一个系统需要做什么的情况下都能提出好的建议,因为这两个系统都可以很好地工作,所以确实需要一个“堆栈架构”。我每周都会看到几十个这样的问题,它们都不是编程问题。。。它们是架构问题。我觉得有区别。编程问题是“尝试这个…”。架构问题是:“我如何构建…”@shlamar:你说得对,我修正了这个问题并增加了额外的要求。哇,这是一个毫无信息的胜利评论。不管它值多少钱,我认为这个答案一针见血:端点扭曲,它们之间的RabbitMQ,了解您的问题域。