Architecture socket.io广播功能&;Redis发布/订阅架构

Architecture socket.io广播功能&;Redis发布/订阅架构,architecture,redis,socket.io,Architecture,Redis,Socket.io,如果有人能帮我解决一个小问题,我将不胜感激 使用socket.io广播功能与在Redis上设计带有pub/sub的架构有什么区别 例如,在下一个示例中,node.js服务器正在侦听(socket.io)CRUD请求(create)以获取“key”(model“todo”)和值“data”。当它接收到它时,它再次向同一用户发射,并向在同一“频道”上收听的所有用户广播 但是,还有另一种使用socket.io“广播”内容的方法,即使用带有Redis的发布/订阅平台来实现key:value函数。例如,在

如果有人能帮我解决一个小问题,我将不胜感激

使用socket.io广播功能与在Redis上设计带有pub/sub的架构有什么区别

例如,在下一个示例中,node.js服务器正在侦听(socket.io)CRUD请求(create)以获取“key”(model“todo”)和值“data”。当它接收到它时,它再次向同一用户发射,并向在同一“频道”上收听的所有用户广播

但是,还有另一种使用socket.io“广播”内容的方法,即使用带有Redis的发布/订阅平台来实现key:value函数。例如,在另一种情况下,我们正在侦听基于“键”(模型)、函数(创建)和值(数据)的CRUD请求。但在这种情况下,一旦接收到它,就不会通过“socket.broadcast.emit()”发送,而是在Redis上发布:

socket.on(key + ':create', function (data, callback) {
  var t = new ModelClass(data)
    , name = '/' + key + ':create';
  t.save(function (err) {
    pub.publish(key, JSON.stringify({key: name, data: t}));
  });
});
因此,在服务器端,对模型(并发布到Redis)所做的每一个更改都将被捕获(处理程序),并发送到用户客户端(在我的案例中是backbone.js),该客户端将根据key:value received:

sio.on('connection', function (socket) {

   sub.on('message', function (channel, message) {
      var msg = JSON.parse(message);
      if (msg && msg.key) {
          socket.emit(msg.key, msg.data);
      }
});
所以我的问题很简单:-):这两种架构的区别是什么?哪一个更具可伸缩性?更好的设计?模式前进


在我看来,pub/sub体系结构适合于自然不支持“实时”的平台,比如Ruby,而Node.js则在本地支持它。。我错了吗?

Socket.io的广播方法将广播到连接到当前Node.js服务器的所有套接字,但是如果您的应用程序变得流行,并且您需要多台服务器来承载所有Socket.io连接,该怎么办?使用Redis的Pub/Sub,您的消息可以一次分发到多个服务器。

您可能想看看Socket.io中的RedisStore。您可以将socket.io设置为使用Redistore,而不是使用MemoryStore。这样您就可以扩展应用程序


如本文所述(),将Socket.io与Redistore一起使用可能会导致会话出现一些问题,因为会话不在工作人员之间共享。

Hey@user1106811!你应该将答案标记为已接受。谢谢
sio.on('connection', function (socket) {

   sub.on('message', function (channel, message) {
      var msg = JSON.parse(message);
      if (msg && msg.key) {
          socket.emit(msg.key, msg.data);
      }
});