todo el mundo -
Tengo una característica que estoy tratando de agregar a una aplicación Node.js que usa socket.io (4.x, si es importante). Estoy creando un juego en el que me gustaría que el usuario se vuelva a conectar a su juego existente si se desconecta y luego se vuelve a conectar.
La reconexión funciona bien si actualiza la página. Sin embargo, si, por ejemplo, navego a otro lugar y luego presiono el botón Atrás, la reconexión no ocurre. Por ejemplo, solo para probarlo, tengo:
/*Server side:*/ socket.on('connection',(socket)=> { const pinger = setInterval(() => { io.to(socket.id).emit('ping', null); }, 1000); ...etc... } /*Client side:*/ const socket = io(); socket.on('ping',(data)=> { console.log('ping'); });Lo que veo es un evento de "ping" cada segundo (como se esperaba). Voy a una página diferente y luego presiono el botón Atrás. La página se vuelve a renderizar, pero el evento "ping" no vuelve. Después de unos 30 segundos, la conexión se restablece, pero me gustaría que intentara restablecerse de inmediato.
¿Hay alguna manera fácil de obligar al juego a restablecer la conexión con el servidor antes?
¡Gracias por adelantado!
Encontré exactamente el mismo problema y mi solución fue agregar un oyente al evento pageshow (con el argumento 'e' en la devolución de llamada), luego verificar el valor de e.persisted , y si e.persisted es igual a verdadero (significa que la carga de la página actual no es una carga inicial) Luego llamo a window.location.reload() para recargar la página.