【发布时间】:2020-05-06 09:22:57
【问题描述】:
我使用 Firebase 实时数据库将用户的 uid 解析为临时 peerId。每个用户在上线时创建此 peerId,并在下线之前将其设置为 null。 因此,如果在 /peerIdByUid/ 中找到用户的 uid,则用户在线。
这是我的数据的样子:
/peerIdByUid/$uid = $peerId
每个用户都是一个节点,其 uid 为 key,peerId 为 value。
每个用户都有朋友,需要知道他们是否在线、离线等。
我需要为每个引用创建一个观察者吗?
例子:
//for each friend
firebase.database().ref('/peerIdByUid/' + friendUserId).on('value').then(function(snapshot) {
//display friend online/offline
});
有没有更优雅的解决方案,我只用一个观察者观察用户的朋友?
而且我不想做一些昂贵的事情,比如:
firebase.database().ref('/peerIdByUid').on("value")...
因为这会将所有用户的数据下载到客户端,可能会让我破产。
我正在考虑类似的事情
const refsToFriends = ['/peerIdByUid/firend1', '/peerIdByUid/friend2', ...];
firebase.database().observe(refToFriend).on('value').then(...);
另一方面,根据这个答案:What does a Firebase observer actually do? 这没有意义,我可以在每个朋友的参考上创建一个观察者。
我还考虑在每个用户的好友列表中写入 peerId。但这会将所需的空间和流量乘以每个朋友的数量。并且 peerId 变化非常频繁。所以我想把它放在一个地方。
【问题讨论】:
标签: javascript firebase firebase-realtime-database