Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

94
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda