【问题标题】:Example to use socket.io-redis使用 socket.io-redis 的示例
【发布时间】:2016-11-11 23:19:52
【问题描述】:

大家好,感谢您的宝贵时间和帮助。

我需要一个使用 socket.io-redis 的简单示例,请与 cmets 一起使用。 我阅读了文档,但我不明白。 谢谢,

【问题讨论】:

    标签: redis socket.io socket.io-redis


    【解决方案1】:

    socket.io-redis 文档没有提到您实际上需要运行一个 redis 服务器,所以您可能已经忘记了这一点。 socket.io-redis插件使用redis服务器的pub/sub客户端连接多个socket.io实例。

    1. https://redis.io下载并安装一个redis服务器

    2. 将 redis 插件添加到您的 socket.io 实例中:

      var express = require('express');
      var app = express();
      var server = require('http').Server(app);
      var io = require('socket.io')(server);
      var redis = require('socket.io-redis');
      io.adapter(redis({ host: 'localhost', port: 6379 }));
      

      6379是默认redis端口,如果你在同一台服务器上运行node和redis,则为localhost。

    3. 添加你需要的socket.io和socket.io-redis函数

      var your_namespace_socket = io.of('/your-namespace');
      your_namespace_socket.on('connection', function(socket){
      
        socket.on('join', function(room){
          socket.join(room);
      
          //log other socket.io-id's in the room
          your_namespace_socket.adapter.clients([room], (err, clients) => {
            console.log(clients);
          });
        });
      });
      
    4. 使用 socket.io 启动服务器

      server.listen(3000, function(){
         logger.debug('listening on *:3000');
      });
      

    【讨论】:

    • 如果我在不同的机器上运行多个 sockeio nodejs 服务器,这个适配器是否允许我在一个房间中加入来自不同服务器的选定用户?
    • @Aedric 是的,它会的!房间本身保存在 Redis 上,因此当您请求用户时,您实际上并不是从服务器(内存中)请求它,而是从 Redis(跨服务器持久)请求它。来自包的 GitHub 页面 - “适配器启用将事件广播到多个单独的 socket.io 服务器节点。”
    • 非常感谢。为什么没有人告诉我们需要一个 redis 服务器?确实有很多刚入门的人没有听说过redis,真的无法理解这种必要性。再次,非常感谢
    • @kano 来自 Github 页面 - 注意:没有数据存储在 Redis 本身中。 Redis 服务器仅充当发布/订阅服务器。每个发出的消息都会发布到 redis,redis 也会广播到其他套接字服务器。
    猜你喜欢
    • 2020-08-18
    • 2014-03-06
    • 2014-09-25
    • 2011-10-19
    • 2012-03-05
    • 1970-01-01
    • 2016-03-16
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多