【问题标题】:FIrestore chat rooms with bucketing使用存储桶恢复聊天室
【发布时间】:2021-03-11 07:06:54
【问题描述】:

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

系统

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

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

问题

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

【问题讨论】:

    标签: google-cloud-firestore chat


    【解决方案1】:

    您可以在房间文档中添加一个计数器并使用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,您可以使用此 community answer 中提供的示例中的 onAppBackgrounded 函数来调用减少聊天室文档中计数器的更新如果应用程序被用户后台或关闭,作为“强迫”他离开房间的一部分。

    【讨论】:

    • 在网络上使用此代码并且用户关闭标签时将不可靠。
    • 您可以使用this 来检测这些并执行相同的操作
    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多