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

92
Vistas
mantener el detector de eventos adjunto al evento de socket después de la reconexión

Tengo algunos detectores de eventos conectados a un socket en el lado del servidor. Cuando el cliente conectado a ese socket se desconecta (en la actualización de la página, por ejemplo), se vuelve a conectar con un nuevo socket en el lado del servidor diferente al que estaba usando antes de desconectarse. Por lo tanto, todos los detectores de eventos conectados al socket antiguo se pierden. ¿Hay alguna manera de mantener a los oyentes de eventos incluso después de la reconexión? Gracias !

Cliente :

 socket.on('connect', () => { // Do some stuff });

servidor :

 io.on('connection', (socket) => { const CUSTOM_EVENT = 'CustomEvent'; onTimeRunFunctionThatAttachesListnerToAnEvent(socket, CUSTOM_EVENT); console.log(`Client connected to socket id '${socket.id}'`); console.log(`Nb of listners to event ${CUSTOM_EVENT} : ${socket.listenerCount(CUSTOM_EVENT)}`); socket.on('disconnect', (reason) => { console.log('client disconnected'); }); });

Registros

 Client connected to socket id '9FKJ152mdOLaHcC2AAAB' Nb of listers to event 'CustomEvent' = 1 client disconnected Client connected to socket id 'ulqq3yvjQflXLyHTAAAF' Nb of listers to event 'CustomEvent' = 0
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Socket io vuelve a conectar automáticamente a todos los que han establecido una conexión.

Nunca debe crear rutinas que supongan que sus clientes tendrán el mismo socket.id a lo largo de su sesión, incluso si no se producen actualizaciones, el servidor de socket puede perder la conexión y volver a crear uno nuevo.

Aquí puedes leer mejor al respecto

cómo manejar la recarga de la página en las aplicaciones de chat del cliente socket.io

about 4 years ago · Juan Pablo Isaza Denunciar

0

Intenté almacenar oyentes en un objeto global usando clientID cuando el socket se está desconectando y cuando el cliente con el mismo clientID se vuelve a conectar usando un nuevo socket, restauro los oyentes de eventos. Esto parece resolver mi caso.

Servidor

 let playersEventListeners = {}; io.on('connection', (socket) => { console.log(`Client connected to socket id '${socket.id}'`); const CUSTOM_EVENT = 'CustomEvent'; if (socket.handshake.auth.clientID in playersEventListeners) { console.log('overriding event listeners'); for (let listener of playersEventListeners[socket.handshake.auth.clientID]){ socket.addListener(CUSTOM_EVENT , listener); } console.log(`Nb of listners to event ${CUSTOM_EVENT} : ${socket.listenerCount(CUSTOM_EVENT)}`); } oneTimeRunFunctionThatAttachesListnerToAnEvent(socket, CUSTOM_EVENT); socket.on('disconnecting', (reason) => { console.log('client disconnecting'); console.log(`Nb of listners to event ${CUSTOM_EVENT} : ${socket.listenerCount(CUSTOM_EVENT)}`); // Store socket event listeners before disconnecting playersEventListeners[socket.handshake.auth.clientID] = socket.listeners(CUSTOM_EVENT); }); socket.on('disconnect', (reason) => { console.log('client disconnected'); }); });

Registros

 Client connected to socket id '9FKJ152mdOLaHcC2AAAB' client disconnecting Nb of listers to event 'CustomEvent' = 1 client disconnected Client connected to socket id 'ulqq3yvjQflXLyHTAAAF' overriding event listeners Nb of listers to event 'CustomEvent' = 1
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