像实时数据库中一样,firestore中是否有类似onDisconnect()的方法?

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 美元。

  • 很高兴你添加了计算!可能值得注意的是,考虑到他们在应用程序内花费 24/7,每月 5 美元/用户并不是很多,你会_希望_通过这类用户获利。:P (5认同)

Pet*_*dad 8

根据此onDisconnect

onDisconnect类最常用于管理应用程序中的状态,在该应用程序中检测连接了多少个客户端以及其他客户端何时断开连接非常有用。

为了能够在Firestore中使用状态,您需要将Firestore与实时Firebase连接(没有其他方法)。

请检查此以获取更多信息:

https://firebase.google.com/docs/firestore/solutions/presence