Javascript Firebase:获取聊天室(或任何抽象资源)中当前的用户数量
我有一个webapp,用户可以加入不同数量的聊天室。 firestore集合如下所示:Javascript Firebase:获取聊天室(或任何抽象资源)中当前的用户数量,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有一个webapp,用户可以加入不同数量的聊天室。 firestore集合如下所示: chatrooms: { "g4HL09vHfkaO3": { "name": "Chatroom 1", "messages": ... }, "lpScgY74gHJ87": { "name": "Chatroom 2", "messages": ... } } unsubscribe() 当用户加入聊天室时,webapp将按顺序将侦听器
chatrooms: {
"g4HL09vHfkaO3": {
"name": "Chatroom 1",
"messages": ...
},
"lpScgY74gHJ87": {
"name": "Chatroom 2",
"messages": ...
}
}
unsubscribe()
当用户加入聊天室时,webapp将按顺序将侦听器附加到给定文档
获取消息并接收传入消息,例如:
unsubscribe = firebase
.firestore()
.collection("chatrooms")
.doc("g4HL09vHfkaO3")
.onSnapshot( ... )
当用户离开聊天室时,应用程序将如下分离侦听器:
chatrooms: {
"g4HL09vHfkaO3": {
"name": "Chatroom 1",
"messages": ...
},
"lpScgY74gHJ87": {
"name": "Chatroom 2",
"messages": ...
}
}
unsubscribe()
现在,我的目标是在应用程序中显示给定聊天室中当前的用户数量,因此问题是:
- 是否可以从firebase获得连接到聊天室等g4HL09vHfkaO3的全球侦听器数量
- 如果不是,实现我想要的最直接的方法是什么
Firestore没有向集合返回侦听器数量的公共API。如果您想知道聊天室中的人数,您可以:
谢谢你的回答,你能详细说明一下吗?我的
聊天室集合中没有用户列表,因此我不了解您的解决方案是如何应用的,不需要列表。此函数考虑父层次结构下的所有对象。从我在文档()中看到的内容来看,这似乎与我的需要无关。使用该方法,我可以获得聊天室文档的属性,即2(名称和消息),但不是监听快照的用户数。当您监听g4HL09vHfkaO3用户,然后使用numChildren时,它将读取名称和消息,但如果您读取聊天室集合并使用numChildren,则您将获得用户数。嘿,Minal。您提供的链接指向实时数据库的文档,而Etiardo正在使用CloudFireStore。虽然两者都没有内置计数运算符,但API和文档是不同的。据我所知,计数器的问题是,在客户端崩溃或其他故障时,计数器不会减少。我希望找到比与实时数据库同步更容易实现的方法,但我认为这是目前的标准方法。谢谢你的回复!事实上,Firestore的无连接线协议基本上不能很好地处理脏的断开连接。这就是为什么推荐的解决方案使用实时数据库,在引擎盖下使用Web套接字进行检测是可行的。