Socket.IO 与 RabbitMQ?

问题描述 投票:0回答:3

我目前正在使用 Socket.IO 和 redis 存储。

我正在使用房间功能。

所以我完全同意房间加入(订阅)

然后使用 Socket.IO 离开(取消订阅)。

我才看到这个页面

http://www.rabbitmq.com/blog/2010/11/12/rabbitmq-nodejs-rabbitjs/

我发现有些人正在使用 Socket.IO 和rabbitMQ。

为什么单独使用Socket.IO还不够好?

将 Socket.IO 与rabbitMQ一起使用有什么好的理由吗?

socket.io rabbitmq
3个回答
20
投票

SocketIO 是浏览器 --> 服务器传输机制,而 RabbitMQ 是服务器 --> 服务器消息总线。

两者可以一起实现,以在用户旅程由在浏览器上开始并最终到达某个持久层(例如数据库)的消息组成的情况下创建一个响应速度非常快的系统。

消息将通过 socketIO 传输到 Web 服务器,然后,Web 服务器不再负责保存该消息,而是将其放入 Rabbit 队列中,并让其他进程负责保存该消息。这样,Web 服务器就可以自由地返回其 Web 服务职责,最重要的是,减轻其负载。


6
投票

我只是出于与接受的答案不同的原因将rabbitMQ与socket.io一起使用。这在 2012 年并不是那么相关,这就是我在这里更新它的原因。

我正在使用具有可扩展性和高可用性的聊天应用程序的 docker swarm 部署。我在集群中运行了聊天应用程序(使用 socket.io)的三个副本。群集群自动对传入请求进行负载平衡,并且在任何给定时间客户端都可能连接到应用程序的三个副本中的任何一个。

在这种情况下,确实有必要同步应用程序副本中的 WebSocket 响应,因为连接到应用程序的两个不同实例的两个客户端将无法获取彼此的消息,因为它们已连接到不同的 WebSocket。

这就是rabbitMQ 发挥作用的地方。它同步应用程序的所有实例,并且每当从副本上的 WebSocket 推送消息时,所有副本都会推送该消息。

项目的完整细节已在此处给出。这是socket.io 和rabbitMQ 结合使用的潜在用例。这适用于在具有高可用性和可扩展性的分布式环境中使用 socket.io 的任何应用程序。


5
投票

看看 SockJS http://sockjs.org .

  1. RabbitMQ团队制作
  2. 比Socket.io简单
  3. 有一个用于 SockJS 的 erlang 服务器

除此之外,RabbitMQ 团队内部有一个实验项目,旨在为 RabbitMQ 提供 SockJS 插件。

© www.soinside.com 2019 - 2024. All rights reserved.