RabbitMQ vs Socket.io?


69

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

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

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

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

这是我的问题:

  1. 它们每个都有什么优点/缺点?
  2. Socket.io可以代替RabbitMQ吗?
  3. 在Socket.io无法满足要求的Web应用程序中,是否需要使用RabbitMQ?

1
您好翁,我更新了答案。希望您现在能更好地理解。别害怕希望我能帮忙;)
Alfred

Answers:


85

更新资料

在Socket.io无法满足要求的Web应用程序中,是否需要使用RabbitMQ?浏览器用户应该能够通过node.js服务器相互通信。其中一位用户编写了一条消息,其他所有用户都将收到该消息。

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

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

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

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

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

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

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


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

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

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

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

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

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

它们每个都有什么优点/缺点?

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


兔子MQ

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

RabbitMQ是消息代理。原理很简单:它接受并转发消息。您可以将其视为邮局:将邮件发送到邮政信箱时,您可以肯定,邮递员会最终将邮件传递给收件人。使用这个比喻,RabbitMQ是一个邮政信箱,一个邮局和一个邮递员。

优点

  • 这是一个非常好的消息队列。我个人会使用redisbeantalkd

缺点:

  • 并不是真正的“浏览器”。

套接字

http://socket.io/

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

优点

  • 用于浏览器

缺点

  • 它不是消息队列。

Socket.io可以代替RabbitMQ吗?

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


1
我已经更新了我的问题,解释了我想做什么。还添加了第三个问题。我想我的问题是我是否真的需要Web应用程序的RabbitMQ。RabbitMQ有什么能做的,我无法使用准系统socket.io甚至长沙发(_changed事件)完成的事情吗?
ajsie 2011年

7
现在对我来说真的很有意义。Socket.io是邮局,参与者必须在那儿。RabbitMQ是更先进的邮局,最终交付,并且遵循FIFO。前者仅适用于Web,后者不特定于Web。感谢您的详尽解释!
2011年

1
哈哈比喻。但是要明确,使用消息队列将其传递到可以读取邮件/消息的第一所房子(准备处理作业),而使用Socket.io则将其传递到正确的房子。我还注意到,rabbitMQ是一个非常高级的消息队列,例如pubsub,rpc,主题,路由(至少很快)。
阿尔弗雷德

1
消息队列是RabbitMQ的构建块。RabbitMQ使用队列来实现其他模式,包括“合适的房子”(称为交换-类似于邮局交换)。
sgtz 2011年

服务器到服务器连接的速度如何?RabbitMQ的协议是否比Socker.IO快?
Amin Shojaei

7

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

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

顺便说一句:Erlang被Facebook和Twitter使用在幕后。

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

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

回复:socket.io(我们在说websockets吗?)-如果这是针对浏览器的(如上面的文章所建议),则可能会将其桥接到RabbitMQ。即RabbitMQ就是那么灵活。


4

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

有关示例,请参见http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/


但是,如果我只做Web应用程序,这是否意味着我只能对其使用socket.io?那会做RabbitMQ已经在做什么吗?
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.