Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

320
Vistas
@socket.io/redis-adaptador y redis; el subcliente no se vuelve a conectar después de un error

Dado que estoy importando estos paquetes:

 import {Socket, Server} from 'socket.io'; // @4.4.1 import {createClient} from 'redis'; // @4.0.4 import {createAdapter} from '@socket.io/redis-adapter'; // @7.1.0 import {Server as HttpServer} from 'http'; // npm@8.5.5, node@v17.7.0

Tengo un servidor que he creado con:

 const http = HttpServer // from 'http', creation not in this code const io = new Server(http, { path: '/socket/v1/tunnel', serveClient: false, cookie: false, pingTimeout: 295000, pingInterval: 300000, });

y Redis pub/sub clientes que he creado con:

 const pubClient = createClient({ url: redisAddress, }); const subClient = pubClient.duplicate();

Después de tener estos, conecto los clientes de Redis y los agrego a un adaptador (en io ) con lo siguiente:

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

Con lo anterior, tengo un servidor de socket en funcionamiento. Mi problema es que cada ~1 hora se produce un error en mi conexión con los clientes de Redis. El pubClient se vuelve a conectar de inmediato (como espero que haga según la documentación), pero el subcliente falla y no se vuelve a conectar.

Puedo emitir a salas en Redis desde otros sistemas, y mientras este subcliente está conectado, los mensajes se transmiten a los dispositivos apropiados. Después de que el subcliente comete un error la primera vez (lo que ocurre de manera bastante predecible en un intervalo de aproximadamente 1 hora), no se vuelve a conectar, lo que significa que las emisiones a las salas de Redis ya no se enrutan a sus destinos.

Tengo algunas preguntas:

  1. ¿Por qué el cliente de Redis no se vuelve a conectar? El pubClient se vuelve a conectar después de errores de manera constante, pero el subcliente no lo hace. Según la documentación de Redis, debería volver a conectarse automáticamente, ¿por qué no?
  2. ¿Cómo puedo configurar el subcliente para que se vuelva a conectar después de errores? ¿Debería agregar un subClient.connect() dentro del controlador para subClient.on('error', () => {...} , o lo configuré incorrectamente y debería crear un nuevo cliente distinto con createClient({. ..})?
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Este problema estaba siendo causado por el paquete redis. redis@4 no se vuelve a conectar correctamente en los canales pub/sub (actualmente, v4.0.4). La degradación de redis a v3.1.2 resolvió el problema de reconexión por completo

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda