如何知道客户何时停止侦听Firestore中的更改以供特定参考?

时间:2019-08-14 09:55:01

标签: firebase google-cloud-firestore

我正在努力寻找解决方案,以解决我在Firestore中需要做的一件有趣的事情。

如果您帮助我,会很棒。我将尝试解释:

我有类似扑克桌的内容,用户可以在其中创建表格并将其加入。当用户打开表时,其他用户可以在表中看到他。当他离开桌子时,他应该消失了(这是我遇到的问题)

离开表可以通过导航到其他页面,关闭选项卡等来实现。他可以在同一表中的不同选项卡,浏览器或设备中(如果没有其他选择,我可以更改此表)。

所以我需要显示哪些球员连接到一张桌子。 您能想到一个最佳解决方案吗?您将如何实施?

如果有帮助,我尝试了一些但不起作用的事情:

    当用户关闭侦听表中的更改的websocket时,从服务器端进行监听;如果没有为该用户和表打开其他套接字,请将该用户从表中删除。   =>不可能
  • 创建一个setInterval clientSide以每10秒为表中的用户更新db中的时间戳。然后,在显示表格时,通过此tiemestamp比Date.now()更新的方式过滤玩家-15秒   =>效果不好,有故障并且对DB进行了大量更新
  • 我还尝试了使用实时数据库的buildPresence hack,但没有帮助。知道用户在线是有用的,而不是在用户离开特定表时有用。

1 个答案:

答案 0 :(得分:1)

  

所以我需要显示哪些球员连接到一张桌子。您能想到一个最佳解决方案吗?您将如何实施?

我能想到的最简单的解决方案是创建表的集合,并在每个文档中存储一组用户ID:

Firestore-root
   |
   --- tables (collection)
         |
         --- tableId (document)
               |
               --- users: ["usersIdOne", "usersIdTwo", "usersIdThree"]

现在要检查玩家是否已连接到桌子,您只需在文档/查询上附加realtime listener,就可以实时获取数据。这意味着一旦玩家加入或离开桌子,听众就会被解雇,并立即收到通知。

要将用户添加到表中,只需在users数组中添加其uid,并要删除侦听器,请从users数组中删除其uid。有关更多信息:

请参阅arrayUnionarrayRemove