use*_*800 7 firebase angularfire
我正在建立实时聊天,与skype非常相似.我在客户端使用firebase作为后端和angularfire.基本上,所有事情看起来都很清楚,但我坚持一件事 - 显示未读消息的数量.
应用程序使用非常简单的Firebase设计:2个或更多用户可以在"房间"中聊天 - 具有唯一名称的根集合.除文本之外的聊天消息可以包含"元数据" - 发送者ID,时间戳等.
简单地说,我需要模拟这个伪代码:
room.messages.where({unread:true}).count()
现在,根据这个,(我可以计算一个位置的孩子而不检索实际的子数据吗?)这个我试图通过事务管理每个房间的未读消息数,并在查看时重置计数.但这是非常棘手的部分,我很好奇,我们在这里有任何推荐的方法,这可以减少工作量吗?
看来你已经回答得差不多了。Firebase 中没有 WHERE 子句,解决方案是使用 snap.numChildren() (如常见问题解答所述),或使用计数器(如第二个链接所述)。
如果您无论如何都要获取聊天消息,或者是一对一的聊天,其中总有效负载为 100 KB 或更少(20 条左右 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());
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4853 次 |
| 最近记录: |