Я использую Firebase Realtime Database для преобразования uid пользователя во временный peerId. Каждый пользователь создает этот peerId, когда они выходят в сеть, и устанавливает для них значение null, прежде чем они go отключатся. Таким образом, пользователь находится в сети, если его uid находится в /peerIdByUid/.
Вот как выглядят мои данные:
/peerIdByUid/$uid = $peerId
Каждый пользователь является узлом с его uid в качестве ключа и peerId в качестве значения.
У каждого пользователя есть друзья, и ему нужно знать, если они в сети, отключены ли они и т. д. c.
Нужно ли мне создавать наблюдателя для каждой ссылки?
Пример:
//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(...);
С другой стороны рука, согласно этому ответу: Что на самом деле делает наблюдатель Firebase? это не имеет смысла, и я могу просто создать наблюдателя по ссылке каждого друга.
Я также думал о написании peerIds в списке друзей каждого пользователя. Но это умножит количество необходимого места и трафика c на количество каждого друга. И peerId меняется очень часто. Так что я хочу это в одном месте.