Вы можете объединить операции разъединения с мониторингом состояния соединения и отметками времени сервера, чтобы создать систему статуса соединения пользователя. В этой системе каждый пользователь хранит данные в определенном месте базы данных, чтобы предупредить клиента базы данных в реальном времени о подключении к сети. Клиент устанавливает для этого местоположения значение true, когда оно подключается к сети, и метку времени при отключении. Эта временная метка указывает, когда пользователь был в сети в последний раз.
В приложениях выполняется операция отключения перед отображением пользователя в сети, поэтому не возникает конфликтов, если клиент теряет сетевое подключение до того, как две команды отправляются на сервер. .
// since I can connect from multiple devices or browser tabs, we store each connection instance separately
// any time that connectionsRef's value is null (i.e. has no children) I am offline
var myConnectionsRef = firebase.database().ref('users/test/connections');
// stores the timestamp of my last disconnect (the last time I was seen online)
var lastOnlineRef = firebase.database().ref('users/test/lastOnline');
var connectedRef = firebase.database().ref('.info/connected');
connectedRef.on('value', function(snap) {
if (snap.val() === true) {
// We're connected (or reconnected)! Do anything here that should happen only if online (or on reconnect)
var con = myConnectionsRef.push();
// When I disconnect, remove this device
con.onDisconnect().remove();
// Add this device to my connections list
// this value could contain info about the device or a timestamp too
con.set(true);
// When I disconnect, update the last time I was seen online
lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
}
});