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

502
Vistas
Firebase Realtime Database onDisconnect() Coherencia

Tengo un sistema de presencia de base de datos en tiempo real que funciona casi por completo, como se describe aquí , pero tengo algunos problemas. Parece que las personas permanecen en línea incluso después de haberse desconectado hace un tiempo. No estoy seguro de por qué, pero he abierto mis reglas de seguridad a solicitudes no autenticadas temporalmente sin éxito. Podría deberse al error descrito aquí .

Si el problema es la escalera, ¿cuál sería la implementación adecuada de JavaScript para evitar este problema? ¿Es una buena solución recrear el oyente onDisconnect cada 60 minutos? Como referencia, el código que estoy usando se muestra a continuación:

 export function selfPresence(byUpdate) { onValue(ref(rtdb, '.info/connected'), (snap) => { isDBConnected = snap.val(); if (snap.val() === true) { presencecon = push(ref(rtdb, `users/${user.uid}/connections`)); // Create new presence thing. onDisconnect(presencecon).remove(); set(presencecon, true); onDisconnect(ref(rtdb, `users/${user.uid}/lastOnline`)).set(serverTimestamp()); onDisconnect(ref(rtdb, `users/${user.uid}/currentlyListening`)).remove(); } }); }

MI SOLUCIÓN

  • No pude averiguar cómo hacer que RTDB actúe de manera consistente, así que opté por el código a continuación. Básicamente, solo actualiza un valor booleano en una ruta específica de modo que si/cuando el problema SÍ ocurre, la próxima vez que el usuario esté en línea, sobrescribirá la falla con un nuevo oyente en línea.
 onValue(ref(rtdb, '.info/connected'), (snap) => { isDBConnected = snap.val(); if (snap.val()) { onDisconnect(presencecon).set(false); presencecon = ref(rtdb, `users/${user.uid}/online`); isDBConnected = snap.val(); } else { remove(presencecon); } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El siguiente código actualiza un valor booleano en una ruta específica para que, si/cuando el problema SÍ ocurra, la próxima vez que el usuario esté en línea, sobrescribirá la falla con un nuevo oyente en línea.

 onValue(ref(rtdb, '.info/connected'), (snap) => { isDBConnected = snap.val(); if (snap.val()) { onDisconnect(presencecon).set(false); presencecon = ref(rtdb, `users/${user.uid}/online`); isDBConnected = snap.val(); } else { remove(presencecon); } }
about 4 years ago · Juan Pablo Isaza Denunciar
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