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

124
Views
¿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
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!