Redis 与套接字崩溃后如何恢复房间中的套接字。io/redis-adapter

How can I restore sockets in rooms after Redis crashes with socket.io/redis-adapter

我在 node.js 中做了一个项目,它使用 socket.iosocket.io/redis-adapter 连接多个套接字并在 Redis 中管理它们。我希望做到这一点,以便如果 Redis 完全崩溃,它的状态可以通过使用活动套接字重建。

到目前为止,我已经有了一个可用的服务器

  const pubClient = createClient({
    url: redisAddress,
  });
  pubClient.on('error', error => {
    Logger.error(error);
  });
  const subClient = pubClient.duplicate();
  subClient.on('error', error => {
    Logger.error(error);
  });
  Promise.all([pubClient.connect(), subClient.connect()]).then(() => {
    io.adapter(createAdapter(pubClient, subClient));
...

一旦我连接了这些,一切都很好,其他服务可以发送到 Redis,连接的设备将接收这些指令。

当 Redis 出现故障时,我观察到套接字服务器在可用时重新连接到 Redis,但是 Redis 已经丢失了它拥有的所有连接信息。如果我强制插座重新连接,它们似乎会被添加到房间(名称与之前相同)但发射到这些房间的信号不会到达设备。

我猜 Redis 正在网关上存储某种缓存,当 Redis 连接失败时我需要清除它;我该怎么做?

这个问题有点问题。 Socket.io redis 适配器处理这个问题,我遇到的问题是 redis 客户端没有完成子客户端上的重新连接操作引起的。目前将 redis 包降级到 v3.1.2 无需进一步更改即可工作。