RabbitMQ VS Socket.io?

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

浏览器用户应该能够通过 node.js 服务器彼此通信。其中一个用户写一条消息,所有其他用户都会收到。

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

用户(在浏览器中)发布某些内容,订阅者(在其他浏览器中)获取该消息。Socket.io 不就是这么处理 websockets 的吗?

以下是我的问题:

  1. 它们各自的优缺点是什么?
  2. Socket.io 能取代 RabbitMQ 吗?
  3. 有没有一些情况下,我需要 RabbitMQ 的网络应用程序 Socket.io 不够?
37122 次浏览

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

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

更新

有没有可能我需要 RabbitMQ Socket.io 没有的网络应用程序 够了吗? 浏览器用户应该能够通过 node.js 服务器彼此通信 用户写一个消息,所有其他用户将得到它。

如果您只有这些简单的需求,那么 Socket.io 就足够了。.当您希望以可控的方式脱机处理作业时,只需要一条消息 排队

Http://en.wikipedia.org/wiki/message_queue

消息队列提供异步 通讯协议,也就是说 信息的发送者和接收者 不需要与 消息队列。

这个句子需要理解。生产者(一个进程)将作业放入队列,使用者通过从队列中获取作业来消费。大多数情况下,使用者是并发使用多个作业的多个进程。消费者无法从彼此那里得知,他们正在消费什么样的工作。

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

我认为这是排队的一个重要属性。First-In-First-Out 属性,但是使用类似 beanstalkd 的高级消息队列可以为作业分配优先级。

我希望这完全说得通;)


我在做实时网络应用 发展。

你能解释得更清楚一点吗? 这样我们才能给你一个更好的答案?

我不太明白 RabbitMQ 是怎么工作的。 但是从快速阅读来看 处理出版/订阅 信息。

请参阅下面关于消息队列的引用。好好想想。你也可以阅读关于 消息队列的 WIKI。

用户(在浏览器中)发布 和订阅者(在其他 浏览器)得到这个消息。是不是 Socket.io 在做什么 网络插座?

Socket.io supports a lot of different transports(also websockets) and it should because websockets are not supported by the most browsers. But for example Google Chrome does already support websockets. I believe that websockets are the transport of the future(but not yet!). When you look at Socket.io 的浏览器支持页面 you will notice that Socket.io does support all the major browsers(some even ancient). The nice thing is that it wraps this around a nice API.

优点/缺点是什么 每一个都是吗?

你把苹果比作橙子,所以比较起来有点奇怪。


RabbitMQ

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

RabbitMQ 是一个消息代理 主要思想很简单: 它 接收和转发信息。你可以 把它想象成一个邮局: 当 你把邮件寄到你所在的邮箱 我很确定邮差先生会的 最终把邮件送到你的 接受者,用这个比喻 RabbitMQ 是一个邮箱,一个邮局 还有邮递员。

好处

缺点:

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

Socket.io

Http://socket.io/

Socket.IO 旨在开发实时应用程序 在 每一个浏览器和 移动设备,模糊 不同之间的差异 运输机构。

好处

  • 这是为浏览器

缺点

  • 它不是消息队列。

Socket.io 能取代 RabbitMQ 吗?

不,你不能,因为它们是两个完全不同的东西。你把苹果比作橘子。你应该试着从我引用的网站上理解这两种描述。

RabbitMQ 是一种真正灵活的创建网络拓扑的方法。它是成熟的,支持的,来自金融领域(在金融领域,他们已经做了很长时间的信息传递)。我使用 RabbitMQ 服务器端,并使用其他协议通过一个“网关”连接到 RabbitMQ。

在幕后,RabbitMQ 是用一种名为 Erlang 的超级简洁的函数式语言编写的。这本身并没有什么大不了的,但争论的焦点在于,如果您知道自己在做什么,并且可以用更少的代码行来表达它,那么它最终将更加可靠和可测试。

顺便说一句: Erlang 被 Facebook 和 Twitter 用于幕后工作。

现在,RabbitMQ 不仅仅是一个网络套接字类型的东西... 它是基于“保证交付”。该特性对于企业环境非常重要。RabbitMQ,或者可以用来扩展... 实际上,还有更多的... 我没有做到这一点公正。

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

Re: socket.io (我们说的是 websockets 吗?)如果这是针对浏览器的(正如上面的文章所建议的) ,那么您可能会将其连接到 RabbitMQ。也就是说 RabbitMQ 就是这么灵活。