我想用Python创建两个应用程序,它们应该相互通信。其中一个应用程序的行为应该像服务器,第二个应用程序应该是客户机的GUI。它们可以运行在同一个系统上(在同一台机器上),也可以在远程和不同的设备上运行。
我想问您,我应该使用哪种技术-- AMQP消息传递(如RabbitMQ)、Twisted (如服务器或Tornado)或ZeroMQ --并将应用程序连接到它。将来我想要一些认证等等。
我读过很多问题和文章(比如这个:Why do we need to use rabbitmq),很多人都说“狂犬病和扭曲是不一样的”。我知道他们是。我真的很想知道和的不同之处,为什么在这种情况下,其中一个解决方案会优于另一个解决方案。
编辑:--我想将它与以下要求一起使用:
补充:我很想知道为什么一种解决方案会比另一种方案更好,而不仅仅是在这种特殊情况下。
发布于 2013-02-05 19:46:55
to是用来解决C10k网络问题的,它通过Reactor Pattern为您提供异步网络。它也很方便,因为它提供了一个很好的并发抽象,就像Python中的线程/并发不像Erlang那样容易。因此,有些人使用Twisted来分派工作任务,但这不是设计的目的。
RabbitMQ基于message queue模式。这一切都是关于可靠的消息传递,而不是网络。我强调可靠的部分,因为有许多不同的异步网络框架(例如Vert.x)提供消息传递(也称为pub/sub)。
很多时候,大多数人将这两种模式结合在一起,创建一个“消息总线”,它将满足各种网络需求,不存在不必要的网络阻塞,并具有很好的集成性和可扩展性。
“消息队列”非常适合网络“反应堆循环”的原因是,您的不应该在反应堆循环上使用块,所以您必须将阻塞工作分派给其他进程(线程、lwp、单独的机器进程、队列等)。在实践中,最干净的方法是分发消息传递。
根据您的需求,听起来您应该使用异步网络,如果您想要立即显示结果并进行扩展,但您可能可以使用一个简单的系统,它只是投票,因为您只有少数几个客户。那么问题是有多少用户(Twisted)?您希望提供更新(RabbitMQ)有多可靠?最后,你想要你的架构是语言和平台不可知论.也许您以后想使用Node.js (关注消息队列而不是异步网络).ie RabbitMQ)。就我个人而言,我想看看Vert.x,它允许您用Python编写。
发布于 2013-02-05 16:15:12
当有人告诉你Twisted和RabbitMQ是不同的,是因为比较两者就像用不同的目标比较两件事情一样。
扭曲是一个异步框架,就像Tornadao一样。RabbitMQ是一个消息队列系统。你不能把每一个都比较清楚。
你应该把你的问题变成两个新的问题,第一个是我应该用来沟通我的过程的协议吗?答案可以用amqp,协议缓冲器之类的词来解决.
另一个,我应该使用哪个框架来编写我的客户机和服务器程序?这里的答案可能落在Twisted,龙卷风,.
https://stackoverflow.com/questions/14686136
复制相似问题