gpt4 book ai didi

firebase - 管理 Firebase 聊天中的未读消息

转载 作者:行者123 更新时间:2023-12-02 21:41:38 24 4
gpt4 key购买 nike

我正在构建实时聊天,与 Skype One 非常相似。我使用 firebase 作为后端,在客户端使用 Angularfire。基本上,所有事情看起来都很清楚,但我坚持一件事 - 显示未读消息数。

应用使用非常简单的 Firebase 设计:2 个或更多用户可以在一个“房间”中聊天 - 具有唯一名称的根集合。除文本之外的聊天消息可以包含“元数据” - 发件人 ID、时间戳等。

简单地说,我需要这个伪代码的模拟:

room.messages.where({ unread: true }).count()

目前,根据 this ,(我可以在不检索实际子数据的情况下对某个位置的子节点进行计数吗?)和 this我正在尝试按事务管理每个房间的未读消息计数,并在查看时重置计数。但这是非常棘手的部分,我很好奇,我们这里有什么推荐的方法,可以减少工作量吗?

最佳答案

看来你已经回答得差不多了。 Firebase 中没有 WHERE 子句,解决方案是使用 snap.numChildren()(如常见问题解答所述),或使用计数器(如第二个链接所述)。

如果您无论如何都要获取聊天消息,或者是一对一的聊天,其中总有效负载为一百 KB 或更少(二十条左右 10kb 消息),那么只需使用 numChildren。如果消息负载相当大,则设置计数器。

所以你会维护一个计数器:

  • 您的用户已阅读多少条消息
  • 存在多少条消息
  • 差异在于未读消息的数量

由于您的“消息存在”计数器将由多个用户同时更新,因此您可以使用事务来完成此操作而不会发生冲突:

new Firebase(URL_TO_COUNTER).transaction(function(currValue) {
return (currValue||0)+1;
}, function(err, success, snap) {
if( err ) { throw err; }
console.log('counter updated to '+snap.val());
});

关于firebase - 管理 Firebase 聊天中的未读消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com