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

132
Visualizações
¿Cómo solucionar el retraso entre la desconexión de un usuario y la activación del evento de desconexión en el servidor con socket.io?

Estoy tratando de construir un pequeño sistema de lobby con socket.io, pero recientemente encontré un problema cuando un usuario cierra una pestaña para salir del lobby. Quiero tener comentarios instantáneos (o casi instantáneos) en el lado del cliente cuando el usuario se desconecte del lobby.

Desafortunadamente, siempre toma alrededor de 35 segundos entre el cierre de una pestaña del navegador y el disparo del evento socket.on('disconnect') en el servidor, que es demasiado tiempo para lo que necesito.

Ya investigué un poco y descubrí que la conexión se cierra instantáneamente cuando el motivo del cierre es un cierre de transporte o un error de transporte .

En mi caso, parece ser un tiempo de espera de ping , lo que significa que socket.io espera un tiempo hasta que se envía el siguiente paquete. Si eso no sucede, la conexión se cerrará.

Entonces, mi pregunta ahora es, ¿por qué el motivo del tiempo de espera de ping tiene lugar aquí al cerrar una pestaña y cómo puedo cambiarlo a un motivo de cierre de transporte ?

Mi código actual se ve así:

 const path = require('path'); const http = require('http'); const express = require('express'); const socketio = require('socket.io'); const formatMessage = require('./utils/messages'); const { userJoin, getCurrentUser, userLeave, getRoomUsers } = require('./utils/users'); const app = express(); const server = http.createServer(app); const io = socketio(server); // Run when client connects io.on('connection', socket => { socket.on('joinRoom', ({ username, room }) => { const user = userJoin(socket.id, username, room); socket.join(user.room); console.log("ROOMS AFTER JOIN: ", io.sockets.adapter.rooms); // Send users and room info io.to(user.room).emit('roomUsers', { room: user.room, users: getRoomUsers(user.room) }); }); // Runs when client disconnects socket.on('disconnect', (reason) => { const user = userLeave(socket.id); console.log("Reason: ", reason) if (user) { // Send users and room info io.to(user.room).emit('roomUsers', { room: user.room, users: getRoomUsers(user.room) }); } }); }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => console.log(`Server running on port ${PORT}`));
about 4 years ago · Juan Pablo Isaza
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