Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

318
Views
@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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!