RabbitMQ vs Socket.io?

我正在做实时的Web应用程序开发。

浏览器用户应该能够通过node.js服务器与彼此进行通信。 其中一个用户写邮件,所有其他用户将得到它。

我不太清楚RabbitMQ是如何工作的。 但从快速阅读看来,它似乎处理消息的发布/订阅。

一个用户(在浏览器中)发布一些东西和订阅者(​​在其他浏览器中)得到这个消息。 这不是什么Socket.io使用websockets?

这是我的问题:

  1. 他们每个人有什么优点/缺点?
  2. 可以用Socket.ioreplaceRabbitMQ吗?
  3. 有没有我需要RabbitMQ的networking应用程序,其中Socket.io不足够?

更新

有没有我需要RabbitMQ的networking应用程序,其中Socket.io不足够? 浏览器用户应该能够通过node.js服务器与彼此进行通信。 其中一个用户写邮件,所有其他用户将得到它。

当你只有这些简单的需求比单独的socket.io就足够了。 。 当您想要以受控方式离线处理您的作业(繁重)时,您只需要一个消息队列 。

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

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

这句话需要沉入其中。生产者(一个进程)将作业放入队列,消费者通过从队列中取出作业来消费。 大多数情况下,消费者是同时消费多个工作的多个进程。 消费者无法相互告知他们正在消费什么工作。

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

这是我认为是队列的一个重要属性。 先进先出属性虽然有一个像beanstalkd这样的高级消息队列,你可以给作业优先级。

我希望这是有道理的);


我正在做实时的Web应用程序开发。

你能不能更好的解释一下,这样我们可以给你一个更好的答案?

我不太清楚RabbitMQ是如何工作的。 但从快速阅读看来,它似乎处理消息的发布/订阅。

请参阅下面关于消息队列的引用。 让它沉入一会儿。 你也可以阅读关于消息队列的WIKI。

一个用户(在浏览器中)发布一些东西和订阅者(​​在其他浏览器中)得到这个消息。 这不是什么Socket.io使用websockets?

Socket.io支持很多不同的传输(也是websockets),它应该是因为大多数浏览器都不支持websocket。 但是例如谷歌浏览器已经支持websocket。 我相信websockets是未来的交通工具(但还没有!)。 当您查看Socket.io的浏览器支持页面时,您会注意到Socket.io确实支持所有主stream浏览器(有些甚至是古老的)。 好的是它围绕着一个漂亮的API进行封装。

他们每个人有什么优点/缺点?

你正在比较苹果,所以比较这是一种奇怪的。


的RabbitMQ

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

RabbitMQ是一个消息中介。 主要想法非常简单:接受和转发消息。 你可以把它想象成一个邮局:当你发邮件到邮箱时,你很确定邮差先生最终会把邮件发送给你的收件人。 使用这个比喻RabbitMQ是邮政信箱,邮局和邮递员。

优点

  • 这是一个相当不错的消息队列 。 我个人会使用redis或beanstalkd 。

缺点:

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

Socket.io

http://socket.io/

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

优点

  • 这是浏览器

缺点

  • 这不是一个消息队列。

可以用Socket.ioreplaceRabbitMQ吗?

不,你不能,因为他们是两个完全不同的东西。 你正在比较苹果和橘子。 您应该尝试从我引用的网站上理解这两个描述。

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

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

RabbitMQ是创buildnetworking拓扑的一种非常灵活的方式。 它是成熟的,支持的,来自金融领域(从事金融业务已经有很长一段时间了)。 我使用RabbitMQ服务器端,并使用其他协议通过“网关”连接到RabbitMQ。

在幕后,RabbitMQ是用超简洁的function语言Erlang编写的。 这本身并没有什么大不了的,但是争议是,如果你知道你在做什么,并且可以用更less的代码行来说,那么它最终更可靠和可testing。

顺便说一句:Erlang被Facebook和Twitter用于幕后的东西。

现在,RabbitMQ不仅仅是一个networking套接字types的东西…它是基于“保证交付”。 该function对于企业情况非常重要。 RabbitMQ,或者可以用来扩展…实际上,还有更多…我没有这样做正义。

我不能评论node.js,因为我还没有机会玩。 我对RabbitMQ很满意。

re:socket.io(我们是在说websockets?) – 如果这是浏览器(如上面的post所示),你可能会把它连接到RabbitMQ。 即RabbitMQ是灵活的。