firebase - 如何知道客户端何时停止侦听 Firestore 中的更改以供具体参考?
问题描述
我正在努力为我需要在 Firestore 中做的一件有趣的事情找到解决方案。
如果你帮助我,那就太棒了。我将尝试解释:
我有类似扑克桌的东西,用户可以在其中创建表格并加入它们。当用户打开表时,其他用户可以在表中看到他。当他离开桌子时,他应该消失(这是我遇到问题的地方)
离开表格可以通过导航到其他页面、关闭选项卡等来发生。他可以在不同选项卡、浏览器或设备的同一个表格中(如果没有其他选项,我可以更改此设置)。
所以我需要的是显示哪些玩家连接到一张桌子。你能想出一个最佳的解决方案吗?你将如何实现这一点?
.
如果有帮助,我尝试了一些但不起作用的方法:
- 当用户关闭监听表中更改的 websocket 时,从服务器端监听,如果没有为该用户和表打开其他套接字,则从表中删除该用户。=> 这是不可能的
- 创建一个 setInterval 客户端,每 10 秒为表中的用户更新 db 中的时间戳。然后,在显示表格时,通过这个比 Date.now() 更新的 tiemestamp 过滤玩家 - 15 秒 => 它不能正常工作,它有故障并且对 DB 进行了很多更新
- 我还尝试了使用实时数据库的 buildPresence hack,但它没有帮助。它只是用于知道用户在线,而不是当他离开特定表时。
解决方案
所以我需要的是显示哪些玩家连接到一张桌子。你能想出一个最佳的解决方案吗?你将如何实现这一点?
我能想到的最简单的解决方案是创建一个表集合并在每个文档中存储一个用户 ID 数组:
Firestore-root
|
--- tables (collection)
|
--- tableId (document)
|
--- users: ["usersIdOne", "usersIdTwo", "usersIdThree"]
现在要检查哪些玩家连接到表,您可以简单地在文档/查询上附加一个实时侦听器,以便您可以实时获取数据。这意味着一旦玩家加入或离开牌桌,监听器就会触发并且您会立即收到通知。
要将用户添加到表中,只需将其 uid 添加到users
数组中,要删除侦听器,请从users
数组中删除其 uid。欲了解更多信息:
请参阅arrayUnion
和arrayRemove
。