node.js - firebase 统计在线用户并在全球计数器中更新
问题描述
我想计算firebase中的在线用户并将值存储在firebase中的online_users下,当用户连接到应用程序以增加online_users以及当用户从应用程序断开连接以减少时。我建立了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.');
});
});
每次用户连接到应用程序时客户端更新用户
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 })
})
}
我对这些功能有一些问题,有时 online_users 是负面的,我想阻止它。有时我得到的交易电流是空的。
我该如何解决?
解决方案
推荐阅读
- .net-core - Serilog Cloudwatch 日志记录未丰富日志
- python - 遍历字典内的列表
- python - TypeError:只能将元组(不是“列表”)连接到项目路由器规划器项目的元组
- amazon-s3 - 如何在我的笔记本电脑上的 URL https://s3.ap-southeast-2.amazonaws.com/snowflake-essentials 中的 S3 存储桶中加载原始 csv 文件
- r - 使用ggplot制作直方图时出错:eval中的错误(lhs,parent,parent)
- html - HTML 中的名称、id、aria、角色属性
- bash - Bash:覆盖不同环境中的行为差异
- javascript - 全高英雄背景图像在移动滚动上调整大小
- assembly - 用汇编语言“显示”换行符或回车符
- c++ - 堆栈反向 poish 计算器