Python IPC - Twisted,RabbitMQ,

Posted

技术标签:

【中文标题】Python IPC - Twisted,RabbitMQ,【英文标题】:Python IPC - Twisted, RabbitMQ, 【发布时间】:2013-01-19 02:48:21 【问题描述】:

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

我想问你,我应该使用哪种技术 - AMQP 消息传递(如 RabbitMQ)、Twisted 类似服务器(或 Tornado)或 ZeroMQ 并将应用程序连接到它。将来我想进行某种身份验证等。

我已经阅读了很多问题和文章(比如这个:Why do we need to use rabbitmq),很多人都在告诉“rabbitmq 和 twisted 是不同的”。我知道他们是。我真的很想知道区别为什么在这种情况下这些解决方案中的一种会比另一种更好。

编辑: 我想按照以下要求使用它:

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

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

【问题讨论】:

您有什么要求:1. 客户端数量(可能只有 1 个?) 2. 发送数据的数量和类型 3. 您发送数据的频率 顺便说一句,ZeroMQ 实现了 AMQP。 我不认为任何人都可以在不了解您需要任一系统做什么的情况下提出好的建议,等等,因为可以想象两者都可以正常工作 确实需要一个“堆栈架构”。我每周都会看到几十个这样的问题,它们不是编程问题……它们是架构问题。我觉得有区别。编程问题是“试过这个......”。架构问题是:“我如何构建……”。 @shlamar:你说得对,我解决了这个问题并添加了额外的要求。 【参考方案1】:

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

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

大多数人通常将这两种模式结合在一起创建一个“消息总线”,它可以满足各种网络需求,而不会出现不必要的网络阻塞,并实现出色的集成和可扩展性。

“消息队列”与网络“反应器循环”如此配合的原因是您不应该阻塞反应器循环,因此您必须调度 阻塞工作到其他进程(线程、lwp、单独的机器进程、队列等)。实际上,最简洁的方法是分布式消息传递。

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

【讨论】:

【参考方案2】:

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

Twisted 是一个异步框架,类似于 Tornada。 RabbitMQ 是一个消息队列系统。你不能直接比较每一个。

您应该将您的问题变成两个新问题,第一个问题是我应该使用哪种协议来传达我的流程?答案可以用诸如 amqp、Protocol Buffers 之类的词来找出......

另外一个,我应该使用哪个框架来编写我的客户端和服务器程序?这里的答案可能落在 Twisted、Tornado、....

【讨论】:

哇,胜利的无信息评论。对于它的价值,我认为这个答案一针见血:Twisted for endpoints,它们之间的 RabbitMQ,了解您的问题域。

以上是关于Python IPC - Twisted,RabbitMQ,的主要内容,如果未能解决你的问题,请参考以下文章

您如何通过Python(而不是通过Twisted)运行Twisted应用程序?

您如何通过 Python(而不是通过 Twisted)运行 Twisted 应用程序?

python之twisted模块安装

Python Twisted介绍

Twisted on Python3的真实现状是什么?

python twisted 模块安装问题