首先,我想补充一点,虽然这是一个Firestore问题,但我愿意听取关于集成额外的Google服务的建议。
系统
我的应用程序中有一个聊天功能。由于可能有一个非常不错的规模,我决定限制一个聊天组。聊天组不是由用户创建的,应该使用某种递增索引(例如: room_1、room_2、.、room_n)自动创建。
每个聊天组的限制最多是100个用户。因此,如果我有100 k用户在线,我希望有1k组(又名n=1000)。
The Issues
发布于 2021-03-11 16:12:38
您可以在房间文档中添加一个计数器,并由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()获得了计数器的当前值,您不需要担心赛车条件,这是很好的考虑,因为您希望有大量的用户,所以这将是不断更新。
你可以把这个包裹在房间柜台的检查上,如果房间超出了你为房间设置的用户的限制,一个新的房间可以开始被填满。
对于第二个问题,需要提供更多的信息,但假设您使用的是安卓系统,则可以在本社区回答中提供的示例中使用社区回答函数来调用更新,如果应用程序被用户背景接地或关闭,该更新会减少聊天室文档中的计数器,作为“强迫”用户离开聊天室的一部分。
https://stackoverflow.com/questions/66577857
复制相似问题