gpt4 book ai didi

firebase - 有没有办法让 firebase 实时数据库存在系统更快地检测到断开连接

转载 作者:IT王子 更新时间:2023-10-29 06:39:24 25 4
gpt4 key购买 nike

我正在创建一个 flutter 应用程序,必须几乎立即检测到用户从实时/firestore 数据库离线并通知其他用户。

我尝试了在实时数据库中订阅 .info/connected 的推荐方法,还更新了一个 firestore 数据库。

FirebaseDatabase.instance
.reference()
.child('.info')
.child('connected')
.onValue
.listen((data) {
if (data.snapshot.value == false) {
// Internet has been disconnected
setState(() {
state.connected = false;
});
userFirestoreRef.updateData({
'status': 'offline',
'lastChanged': FieldValue.serverTimestamp(),
});
}
userDbRef.onDisconnect().update({
'status': 'offline',
'lastChanged': ServerValue.timestamp
}).then((_) async {
// This resolves as soon as the server gets the request, not when the user disconnects
setState(() {
state.connected = true;
});
await userDbRef.update({
'status': 'online',
'lastChanged': ServerValue.timestamp,
}).catchError((e) => debugPrint('Error in realtime db auth, $e'));

await userFirestoreRef.updateData({
'status': 'online',
'lastChanged': FieldValue.serverTimestamp(),
}).catchError((e) => debugPrint('Error in firestore auth, $e'));
});

一旦互联网关闭,实时数据库需要大约 1.5 分钟才能检测到用户断开连接,我希望最长为 10 秒。

最佳答案

客户端可以通过两种方式断开连接:

  • 完全断开连接,客户端让服务器知道它正在消失。

  • 脏连接,客户端消失,由服务器检测这种情况。

对于完全断开连接,您定义的 onDisconnect 写入将立即运行。

脏断开取决于套接字超时,这意味着您的 onDisconnect 写入可能需要几分钟才能发生。对于此行为您无能为力,因为它是套接字工作方式的固有部分。

如果你想要一个更快的方法来检测哪些客户端仍然连接,你可以在数据库中写一个保持事件状态。本质上:每 10 秒从每个客户端写入一个标记值。

关于firebase - 有没有办法让 firebase 实时数据库存在系统更快地检测到断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56532848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com