Kas*_*rma 2 firebase firebase-realtime-database google-cloud-firestore
我想在onDisconnect()的帮助下在实时数据库中检查用户的在线状态,但是现在我已经转移到了Firestore,在其中找不到任何类似的方法。
Tre*_*vor 10
注意:此解决方案不是特别有效
在我的头顶上(阅读:我还没有考虑过警告),你可以做这样的事情:
const fiveMinutes = 300000 // five minutes, or whatever makes sense for your app
// "maintain connection"
setInterval(() => {
userPresenceDoc.set({ online: new Date().getTime() })
}, fiveMinutes)
Run Code Online (Sandbox Code Playgroud)
然后,在每个客户端...
userPresenceDoc.onSnapshot(doc => {
const fiveMinutesAgo = new Date().getTime() - fiveMinutes
const isOnline = doc.data().online > fiveMinutesAgo
setUserPresence(isOnline)
})
Run Code Online (Sandbox Code Playgroud)
您可能希望代码检查存在使用的时间间隔比维护连接的代码使用的时间间隔多一点,以解决网络延迟等问题。
关于成本的说明
因此,很明显,在某人断开连接与其他客户端识别该断开连接之间可能存在显着的延迟。您可以通过增加写入 Firestore 的频率来减少延迟时间,从而增加您的成本。运行这些数字,我得出了以下不同时间间隔的成本,假设单个客户端连接连续运行一个月:
Interval Cost/User/Month
----------------------------
10m $0.007776
5m $0.015552
1m $0.07776
10s $0.46656
5s $0.93312
1s $4.6656
Run Code Online (Sandbox Code Playgroud)
一秒钟的间隔是相当昂贵的,对于一个拥有 10,000 名用户并且整个月都打开应用程序的系统来说,每月需要花费 46,656 美元。对于相同数量的用户,间隔 10 分钟只需每月花费 77.76 美元。更合理的间隔为一分钟、10,000 个用户,每个用户每天仅使用四小时的应用程序,每月收费 129.60 美元。
根据此onDisconnect:
onDisconnect类最常用于管理应用程序中的状态,在该应用程序中检测连接了多少个客户端以及其他客户端何时断开连接非常有用。
为了能够在Firestore中使用状态,您需要将Firestore与实时Firebase连接(没有其他方法)。
请检查此以获取更多信息:
https://firebase.google.com/docs/firestore/solutions/presence
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |