我正在进行实时网络应用开发。
浏览器用户应该能够通过node.js服务器相互通信。其中一个用户写入消息,所有其他用户都会收到消息。
我不太了解RabbitMQ的工作原理。但是从快速阅读来看,它似乎处理消息的发布/订阅。
用户(在浏览器中)发布内容,订阅者(在其他浏览器中)获取该消息。这不是Socket.io用websockets做的吗?
以下是我的问题:
答案 0 :(得分:60)
是否有我需要RabbitMQ的场景 对于Socket.io没有的Web应用程序 满足? 浏览器用户应该能够通过node.js服务器相互通信。一 用户写入消息,所有其他用户都会收到消息。
当你只有socket.io这些简单的要求就足够了。。当您想要离线并以受控方式处理作业(重)时,您只需要一条消息queue。
http://en.wikipedia.org/wiki/Message_queue:
消息队列提供异步 通信协议,意思是 消息的发送者和接收者 不需要与之互动 消息队列同时出现。
这句话需要深入。生产者(一个进程)将一个作业放入队列,消费者通过从队列中取出作业来消耗。大多数情况下,消费者是同时消耗多个作业的多个进程。消费者无法彼此分辨他们正在消费的工作。
这使队列成为一个 先进先出(FIFO)数据 结构
这是我认为队列的一个重要属性。 First-In-First-Out属性虽然具有像beansstalkd这样的高级消息队列,但您可以优先考虑作业。
我希望这根本没有任何意义;)
我正在做实时网络应用 发展。
你能解释一下,以便我们能给你一个更好的答案吗?
我不太了解RabbitMQ的工作原理。 但是从快速阅读中可以看出来 它处理出版/订阅 消息。
请参阅下面有关消息队列的引用。让它陷入一段时间。您还可以阅读关于message queues的WIKI。
用户(在浏览器中)发布 东西和订户(在其他方面 浏览器)获取该消息。不是那样的 Socket.io正在做什么 的WebSockets?
Socket.io支持许多不同的传输(也是websockets),因为大多数浏览器都不支持websockets。但是,例如Google Chrome已经支持websockets。我相信websockets是未来的传输(但还没有!)。当您查看Socket.io's browser support page时,您会注意到Socket.io确实支持所有主流浏览器(有些甚至是古老的浏览器)。好消息是它围绕一个很好的API包装。
有哪些优点/缺点 对于他们每个人?
您正在将苹果与橙子进行比较,因此比较它有点奇怪。
http://www.rabbitmq.com/tutorials/tutorial-one-python.html:
RabbitMQ是一个消息代理。该 主要想法很简单:它 接受和转发消息。您可以 把它想象成一个邮局:什么时候 你发邮件到你的邮箱 很确定Postman先生会的 最终将邮件发送给您 接受者。用这个比喻 RabbitMQ是一个邮箱,一个邮局 和一个邮差。
Socket.IO旨在制作实时应用 可以在每个浏览器和 移动设备,模糊了 不同之间的差异 运输机制。
Socket.io可以取代RabbitMQ吗?
不,你不能,因为他们是两个完全不同的东西。您正在将苹果与橙子进行比较。您应该尝试理解我引用的网站的两个描述。
答案 1 :(得分:5)
RabbitMQ是一种非常灵活的创建网络拓扑的方法。它是成熟的,受到支持的,来自金融领域(在金融领域,他们长期以来一直在做消息传递)。我使用RabbitMQ服务器端,并使用其他协议通过“网关”连接到RabbitMQ。
在幕后,RabbitMQ是用一种名为Erlang的超简洁功能语言编写的。这本身并没什么大不了的,但争论的焦点是,如果你知道自己在做什么,并且可以用较少的代码行说出来,那么它最终会更加可靠和可测试。
btw:Facebook和Twitter使用Erlang作为幕后的东西。
现在,RabbitMQ不仅仅是一个网络套接字类型的东西......它基于“保证交付”。该功能对于企业情况非常重要。 RabbitMQ,或者可以用来扩展...实际上,还有更多...我不是在做正义。
我无法评论node.js,因为我还没有机会玩它。我对RabbitMQ很满意。
re:socket.io(我们正在谈论websockets吗?) - 如果这是针对浏览器的(如上面的帖子所示),你可以将其连接到RabbitMQ。即RabbitMQ是灵活的。
答案 2 :(得分:3)
RabbitMQ用作跨应用程序传递消息的方式,不一定是浏览器中的用户。然后,您可以在node.js中实现RabbitMQ客户端,例如将收到的消息推送到浏览器。
有关示例,请参阅http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/。