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

125
Vistas
¿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 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