美文网首页
socketio redis adapter广播和向另一个集群节

socketio redis adapter广播和向另一个集群节

作者: 哆啦在这A梦在哪 | 来源:发表于2022-09-09 15:39 被阅读0次

前提条件:

socketio v4 版本,对应 redis 版本 6.1以上
在这里描述也是github资料:https://github.com/socketio/socket.io-redis-adapter

image.png

基本资料:

1.基本连接过程: https://socket.io/docs/v4/redis-adapter/
2.使用的几个方法: https://socket.io/docs/v4/server-instance/#fetchsockets

  1. github资料:https://github.com/socketio/socket.io-redis-adapter
    github中显示了所有方法的使用例子,个人觉得别上面那几个文档好用,这里找到 RedisAdapter 这一章的资料接口

一。连接

使用代码案例,连接方式官方几种方式都有,这里简单写一个,主要看二里面方法的使用:

const rds = redis.createClient("127.0.0.1:6543");
const pubClient = rds;
const subClient = pubClient.duplicate();

subClient.connect().then(() => {
   io.adapter(createAdapter(pubClient, subClient));   
});

二。广播和不同节点之间连接发送(不同节点一对一发送)

  io.on("connection", (socket, req) => {
    socket.on("allclients", async () => {
// 参数 rooms 写入房间名称,反馈所有房间内的连接对象
// 这里获取了房间名称为 room-test 的房间内所有连接
// 这里的连接指的是所有 redis adapter 中的连接,
// 也就是说,只要在这个房间内,即使客户端连接的是不同服务器,也能获取到,
// 这时候,只需要自己设置一下用户信息即可,我这里使用的是query参数,
// 你也可以保存一份 client id和用户的对照表
      const cons = await io.adapter.fetchSockets({
        rooms: ["room-test"],
        except: [],
      });
      if (!cons) {
        return;
      }
      cons.forEach((element) => {
        console.log("element.handshake:", element.handshake.query.name);
      });
// io.adapter.sockets 这个方法反馈了所有房间内的 client id(包括不同节点)
      const cs = await io.adapter.sockets(new Set(["room-test"]));
      console.log("cons:", cs);
// allSockets 也可以获取 room-test 房间内所有client id,区别是上面可以多个,这个对应单个房间
console.log("allSockets cons:", await io.in("room-test").allSockets());
    });
  });

总结

1.获取所有集群中的连接对象

这里以房间“room-test”为例

await io.adapter.fetchSockets({
        rooms: ["room-test"],
        except: [],
      })

2.获取所有集群中的client id

这里以房间“room-test”为例

await io.adapter.sockets(new Set(["room-test"]))
await io.in("room-test").allSockets()

相关文章

  • socketio redis adapter广播和向另一个集群节

    前提条件: socketio v4 版本,对应 redis 版本 6.1以上在这里描述也是github资料:htt...

  • Redis之集群环境搭建

    Redis集群 一、Redis集群相关概念 1.Redis集群介绍 Redis 集群是一个提供在多个Redis间节...

  • Redis集群(一)

    Redis 集群概念(一) 本文提取至官网文档 Redis集群介绍 Redis 集群是一个提供在多个Redis间节...

  • redis 集群搭建

    Redis集群 使用redis做缓存工具 实现系统高可用,redis需要做主备。使用redis做分片集群。 向业务...

  • docker搭建redis集群

    Docker 搭建redis集群 此次搭建一个6节点的Redis集群,包括3个主节点和3个从节点。 安装目录 /u...

  • Redis集群重新分片

    内容部分摘自于《Redis的设计与实现》(17章节) Redis 集群的重新分片操作是由 Redis 的集群管理软...

  • Java-分布式框架-redis-3

    一、Redis哨兵集群弊端 redis3.0之前比较可靠的集群就是哨兵集群,主从节点,主节点拥有写与读的权限,从节...

  • 在 Windows 下配置 Redis 集群

    本文只涉及 Redis 在 Windows 中的 集群搭建 和 集群维护 如需配置 Redis(不含集群),请看这...

  • Redis高可用之主从复制实践

    前言 Redis支持多种高可用方案如Redis Sentinel 集群和 Redis 数据集群,但是今天我们的主题...

  • redis迁移工具参考说明

    这两天在弄redis 集群迁移····从自建环境8节点迁移到自建环境6节点。折腾了很久···redis 集群模式是...

网友评论

      本文标题:socketio redis adapter广播和向另一个集群节

      本文链接:https://www.haomeiwen.com/subject/wzianrtx.html