我計算并發連接數如下:
onValue(ref(db, '.info/connected'), snapshot => {
if (snapshot.val()) {
let con = push(ref(db, 'concurrent'), { connected: moment().format('DD/MM/YYYY HH:mm') })
onDisconnect(con).remove()
}
})
但是,當我檢查資料庫時,我看到了幾天前的連接:

這是否意味著用戶從幾天前開始就有不活動的瀏覽器標簽?難道我做錯了什么?該onDisconnect()功能是否100% 可靠?
uj5u.com熱心網友回復:
火力基地在這里
您在concurrent路徑上是否有安全規則要求用戶通過任何機會進行身份驗證?因為有一個開放的問題,解決這個問題,已經引起了越來越多的人的問題最近。
除此之外,我們onDisconnect最近還沒有看到處理中的可靠性問題,因此我們需要查看有關延遲連接的更多資訊(獨立復制會很好)。
uj5u.com熱心網友回復:
閱讀問題,似乎如果選項卡處于非活動狀態超過一個小時,令牌就會過期。如果該選項卡再次處于活動狀態,Firebase 客戶端會重新連接并獲取新令牌。
在令牌過期的情況下洗掉路徑(空閑選項卡):
const removeOnIdleTab = (key, ms) => {
var timer
document.addEventListener('visibilitychange', () => {
if(document.hidden){
// If tab is inactive, delete the path after 'n' ms
timer = setTimeout(() => remove(ref(db, `concurrent/${key}`)), ms)
}
else{
// If tab is active again, clear the timer
clearTimeout(timer)
// If tab is active after 60 mins, rebuild the path.
// Otherwise, don't do anything (returning undefined cancels the transaction)
runTransaction(ref(db, `concurrent/${key}`), value => {
return value ? undefined : ({ connected: moment().format('DD/MM/YYYY HH:mm') })
})
}
})
}
最后:
onValue(ref(db, '.info/connected'), snapshot => {
if (snapshot.val()) {
let con = push(ref(db, 'concurrent'), { connected: moment().format('DD/MM/YYYY HH:mm') })
onDisconnect(con).remove()
removeOnIdleTab(con.key, 60 * 60 * 1000)
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408750.html
標籤:
