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

508
Views
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 answers
Answer question

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 Report
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!