RabbitMQ vs Socket.io?

问题描述 投票:54回答:3

我正在实时进行实时Web应用程序开发。

浏览器用户应该能够通过node.js服务器相互通信。其中一位用户写了一条消息,其他所有用户都将得到它。

我不太了解RabbitMQ的工作方式。但是从快速阅读来看,它似乎可以处理消息的发布/订阅。

用户(在浏览器中)发布内容,而订阅者(在其他浏览器中)获得该消息。这不是Socket.io正在使用websockets吗?

这是我的问题:

  1. 它们各自的优点/缺点是什么?
  2. Socket.io可以代替RabbitMQ吗?
  3. 在某些情况下,对于Socket.io不足够的Web应用程序,我需要RabbitMQ吗?
node.js websocket rabbitmq amqp socket.io
3个回答
69
投票

更新

是否有我需要RabbitMQ的场景适用于Socket.io不存在的Web应用程序满足?浏览器用户应该能够通过node.js服务器相互通信。一的用户写了一条消息,其他所有用户都将得到它。

当您只有这些简单要求时,仅使用socket.io就足够了。。当您要以受控方式脱机处理(大量)作业时,仅需要消息queue

http://en.wikipedia.org/wiki/Message_queue

消息队列提供异步通信协议,这意味着消息的发送者和接收者不需要与消息队列在同一时间。

此句需要插入。生产者(一个进程)将作业放入队列,而消费者通过从队列中取出作业进行消费。使用者通常是多个进程,这些进程同时消耗多个作业。消费者无法彼此告诉他们正在消费什么工作。

这使队列成为先进先出(FIFO)数据结构。

这是队列的重要属性。尽管具有像beantalkd这样的高级消息队列,但“先进先出”属性可以为作业赋予优先级。

我希望这完全没有道理;)


我正在做实时实时网络应用开发。

您能更好地解释一下,以便我们给您更好的答案吗?

我不太了解RabbitMQ的工作方式。但是从快速阅读看来它处理以下内容的发布/订阅消息。

请参阅下面有关消息队列的报价。让它沉入一会儿。您也可以阅读有关message queues的WIKI。

一个用户(在浏览器中)发布东西和订户(在其他浏览器)获取该消息。那不是吗Socket.io在做什么websockets?

Socket.io支持许多不同的传输方式(也支持websockets),这应该是因为大多数浏览器都不支持websockets。但是例如,谷歌浏览器已经支持websockets。我相信websockets是未来的交通工具(但现在还不是!)。当您查看Socket.io's browser support page时,您会注意到Socket.io确实支持所有主流浏览器(甚至有些古老的浏览器)。令人高兴的是,它将它包装在一个不错的API中。

有哪些优点/缺点每一个?

您正在将苹果与橙子进行比较,所以比较有点奇怪。


RabbitMQ

http://www.rabbitmq.com/tutorials/tutorial-one-python.html

RabbitMQ是消息代理。的主要思想很简单:它接受并转发消息。您可以考虑一下它是一个邮局:什么时候您将邮件发送到邮箱我很确定邮递员会最终将邮件发送到您的接受者。使用这个比喻RabbitMQ是一个邮政信箱,一个邮局和邮递员。

优点

  • 这是一个很好的消息队列。我个人将使用redisbeanstalkd

缺点:

  • 不是真的适合“浏览器”。

Socket.io

http://socket.io/

Socket.IO旨在制作实时应用在每个浏览器中可能移动设备,模糊了不同之间的差异运输机制。

优点

  • 用于浏览器

缺点

  • 这不是消息队列。

Socket.io可以代替RabbitMQ吗?

不,您不能,因为它们是完全不同的两件事。您正在将苹果与橙子进行比较。您应该尝试从我引用的网站中了解这两种描述。


6
投票

RabbitMQ是创建网络拓扑的一种非常灵活的方法。它是成熟的,受支持的,并且来自财务领域(在财务方面,他们从事消息传递已经很长时间了)。我使用RabbitMQ服务器端,并使用其他协议通过“网关”连接到RabbitMQ。

在幕后,RabbitMQ用一种称为Erlang的超简洁功能语言编写。就其本身而言,这没什么大不了的,但是争论是,如果您知道自己在做什么,并且可以用更少的代码行来表示,那么它最终将更加可靠和可测试。

btw:Facebook和Twitter使用Erlang作为幕后的东西。

现在,RabbitMQ不仅仅是一个网络套接字类型的东西……它基于“保证交付”。该功能对于企业情况很重要。 RabbitMQ,或者可以用于扩展……实际上,还有更多……我不是在伸张正义。

我无法对node.js进行评论,因为我还没有机会使用它。我对RabbitMQ感到满意。

re:socket.io(我们在说网络套接字吗?)-如果这是针对浏览器的(如以上文章所述),则可能会将其桥接到RabbitMQ中。即RabbitMQ就是那么灵活。


3
投票

RabbitMQ用作在应用程序之间传递消息的方式,不一定是浏览器中的用户。然后,您可以在node.js中实现RabbitMQ客户端,例如将接收到的消息推送到浏览器。

参见http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/示例。

© www.soinside.com 2019 - 2024. All rights reserved.