Adi*_*ari 5 node.js firebase firebase-realtime-database google-cloud-functions
我想计算firebase中的在线用户并将值存储在online_users下的firebase中,当用户连接到app以增加online_users并且当用户从app断开连接到减量时.我建立了firebase功能
export const countOnlineUser = functions.database
.ref('/UserStatus/{uid}')
.onWrite((change, context) => {
var collectionRef = change.after.ref.parent;
var countRef = collectionRef.child('online_users');
let increment = 0;
if (change.after.exists() && !change.before.exists()) {
increment = 1;
} else if (!change.after.exists() && change.before.exists()) {
increment = -1;
} else {
return null;
}
// Return the promise from countRef.transaction() so our function
// waits for this async event to complete before it exits.
return countRef.transaction((current) => {
console.log(current)
if (current == null) {
return 0;
}
else {
return (current || 0) + increment;
}
}).then(() => {
return console.log('Counter updated.');
});
});
Run Code Online (Sandbox Code Playgroud)
每次用户连接到应用程序时,客户端更新用户
constructor() {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const { uid, phoneNumber } = firebase.auth().currentUser._user
UserStore.setUID(uid)
this.setListenConnection()
}
})
setListenConnection = async () => {
this.userStatusDatabaseRef = firebaseRef(`UserStatus/${UserStore.user.uid}`)
firebaseRef('.info/connected').on('value', async connected => {
if (connected.val() === false) {
return
}
await firebaseRef(`UserStatus/${UserStore.user.uid}`).onDisconnect().remove()
this.userStatusDatabaseRef.set({ state: 'online', last_changed: firebase.firestore.FieldValue.serverTimestamp() }, { merge: true })
})
}
Run Code Online (Sandbox Code Playgroud)
我有这些功能的一些问题,有时online_users是负面的,我想阻止它.有时我进入交易当前是空的.
我该如何解决?
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |