RabbitMQ vs Socket.io?

ajs*_*sie 53 amqp rabbitmq websocket node.js socket.io

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

浏览器用户应该能够通过node.js服务器相互通信.其中一个用户写入消息,所有其他用户将获得它.

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

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

这是我的问题:

  1. 每个人的优点/缺点是什么?
  2. Socket.io可以取代RabbitMQ吗?
  3. 是否存在我需要RabbitMQ用于Socket.io不足的Web应用程序的场景?

Alf*_*red 66

更新

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

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

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

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

这句话需要沉入其中.生产者(一个进程)将一个作业放入队列,消费者通过从队列中取出作业来消耗.大多数情况下,消费者是同时消耗多个作业的多个进程.消费者无法彼此分辨他们正在消费的工作.

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

这是我认为队列的一个重要属性.First-In-First-Out属性虽然具有像beansstalkd这样的高级消息队列,但您可以优先考虑作业.

我希望这根本没有意义;)


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

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

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

请参阅下面有关消息队列的引用.让它陷入一段时间.您还可以阅读有关消息队列的WIKI .

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

Socket.io支持许多不同的传输(也是websockets),因为大多数浏览器都不支持websockets.但是,例如Google Chrome已经支持websockets.我相信websockets是未来的传输(但还没有!).当您查看Socket.io的浏览器支持页面时,您会注意到Socket.io确实支持所有主流浏览器(有些甚至是古老的浏览器).好消息是它围绕一个漂亮的API包装.

每个人的优点/缺点是什么?

你正在比较苹果和橙子,所以比较这有点奇怪.


的RabbitMQ

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

RabbitMQ是一个消息代理.主要思想很简单:接受和转发消息.您可以将其视为邮局:当您将邮件发送到邮箱时,您非常确定Postman先生最终会将邮件发送给您的收件人.使用这个比喻RabbitMQ是一个邮箱,邮局和邮递员.

好处

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

缺点:

  • 不是真的用于"浏览器".

Socket.io

http://socket.io/:

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

好处

  • 它适用于浏览器

缺点

  • 它不是消息队列.

Socket.io可以取代RabbitMQ吗?

不,你不能,因为他们是两个完全不同的东西.您正在将苹果与橙子进行比较.您应该尝试理解我引用的网站的两个描述.

  • 现在对我来说真的很有意义.Socket.io是一个邮局,参与者必须在那里.RabbitMQ是一个更先进的邮局,最终交付并跟随FIFO.前者仅适用于网络,后者不适用于网络.感谢您的详尽解释! (4认同)

sgt*_*gtz 5

RabbitMQ是一种非常灵活的创建网络拓扑的方法.它是成熟的,受到支持的,来自金融领域(在金融领域,他们长期以来一直在做消息传递).我使用RabbitMQ服务器端,并使用其他协议通过"网关"连接到RabbitMQ.

在幕后,RabbitMQ是用一种名为Erlang的超简洁功能语言编写的.这本身并没什么大不了的,但争论的焦点是,如果你知道自己在做什么,并且可以用较少的代码行说出来,那么它最终会更加可靠和可测试.

顺便说一句:Erlang被Facebook和Twitter用于他们的幕后工作.

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

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

re:socket.io(我们正在谈论websockets吗?) - 如果这是针对浏览器的(如上面的帖子所示),你可以将其桥接到RabbitMQ中.即RabbitMQ就是那么灵活.