首页 > 解决方案 > 使用存储桶恢复聊天室

问题描述

首先,我想补充一点,虽然这是一个 Firestore 问题,但我愿意听取有关集成额外 Google 服务的建议。

系统

我的应用程序中有一个聊天功能。由于可能有一个非常不错的规模,我决定限制一个聊天组。聊天组不是由用户创建的,应该使用某种递增索引自动创建(例如:room_1、room_2、...、room_n)。

每个聊天组的限制为最多 100 个用户。因此,如果我有 100k 在线用户,我希望有 1k 个组(又名 n=1000)。

问题

  1. 如何在登录后将用户分配到聊天组?(假设策略是先填满当前房间,因此标题中的“桶”)
  2. 由于用户可以在不按“退出”之类的情况下关闭应用程序,因此我需要系统知道进行调整

标签: google-cloud-firestorechat

解决方案


您可以在房间文档中添加一个计数器并使用FieldValue.increment增加/减少它,这是 Javascript 中的一个使用示例:

//when a user enter the room
db.collection('chat_rooms').doc('room_1').update({
    userCount: firebase.firestore.FieldValue.increment(1)
});
//when a user quits the room
db.collection('chat_rooms').doc('room_1').update({
    userCount: firebase.firestore.FieldValue.increment(-1)
});

由于FieldValue.increment()获得了计数器的当前值,因此您无需担心比赛条件,这很好,因为您希望拥有大量用户,因此会不断更新。

您可以将其包裹在房间柜台的检查中,如果房间超过您为房间设置的用户限制,则可以开始填充新房间。

对于您的第二个问题,需要更多信息,但假设您使用的是 android,您可以使用此社区答案onAppBackgrounded中提供的示例中的函数来调用更新,如果应用程序处于后台或关闭状态,该更新会减少聊天室文档中的计数器由用户,作为“强迫”他离开房间的一部分。


推荐阅读