当前位置: 首页 > 知识库问答 >
问题:

火力库实时数据库断开连接() 一致性

令狐辉
2023-03-14

我有一个几乎功能齐全的实时数据库存在系统,如这里所述,但我遇到了一些问题。似乎即使在不久前断开连接后,人们仍然保持在线状态。我不知道为什么,但我暂时向未经身份验证的请求开放了我的安全规则,但无济于事。这可能是由于此处描述的错误。

如果问题是梯子,那么避免这个问题的正确JavaScript实现是什么?每 60 分钟重新创建一次“断开连接”侦听器是一个好的解决方案吗?作为参考,我使用的代码如下所示:

export function selfPresence(byUpdate) {
  onValue(ref(rtdb, '.info/connected'), (snap) => {
    isDBConnected = snap.val();
    if (snap.val() === true) {
      presencecon = push(ref(rtdb, `users/${user.uid}/connections`)); // Create new presence thing.
      onDisconnect(presencecon).remove();
      set(presencecon, true);
      onDisconnect(ref(rtdb, `users/${user.uid}/lastOnline`)).set(serverTimestamp());
      onDisconnect(ref(rtdb, `users/${user.uid}/currentlyListening`)).remove();
    }
  });
}

我的解决方案

    < li >我不知道如何让RTDB始终如一地行动,所以我选择了下面的代码。基本上,它只是在一个特定的路径上更新一个布尔值,这样,如果/当问题发生时,下次用户在线时,它将使用新的在线监听器覆盖失败。
onValue(ref(rtdb, '.info/connected'), (snap) => {
    isDBConnected = snap.val();
    if (snap.val()) {
        onDisconnect(presencecon).set(false);
        presencecon = ref(rtdb, `users/${user.uid}/online`);
        isDBConnected = snap.val();
    }
    else {
        remove(presencecon);
    }
}

共有1个答案

南宫勇军
2023-03-14

下面的代码更新了特定路径上的布尔值,这样,如果/当问题发生时,用户下次在线时,它将使用新的在线监听器覆盖故障。

onValue(ref(rtdb, '.info/connected'), (snap) => {
    isDBConnected = snap.val();
    if (snap.val()) {
        onDisconnect(presencecon).set(false);
        presencecon = ref(rtdb, `users/${user.uid}/online`);
        isDBConnected = snap.val();
    }
    else {
        remove(presencecon);
    }
}

 类似资料:
  • 本章介绍如何从OrientDB命令行断开与特定数据库的连接。 它关闭了当前打开的数据库。 以下语句是Disconnect命令的基本语法。 注 - 只有在连接到特定数据库后才能使用此命令,并且只会关闭当前运行的数据库。 示例 在这个例子中,我们将使用在前一章中创建的名为的数据库。 我们将从数据库断开连接。 可以使用以下命令断开数据库连接。 如果它成功断开连接,将获得以下输出 -

  • 问题内容: 我有一个tomcat实例设置,但是在一段时间不活动之后,我在其中配置的数据库连接不断消失。 当我检查日志时,出现以下错误: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是68051秒前。成功发送到服务器的最后一个数据包是68051秒前,比服务器配置的“ wait_timeout”值长。

  • 我在应用程序中使用Firebase实时数据库进行聊天功能。现在我们已经准备好启动我们的应用程序,因此我们应该修复此问题<代码>xxxx-xxxx-4458'具有不安全的规则。在官方文档和其他地方,我找到了唯一需要使用firebase auth进行验证的解决方案,但我们的主数据库和登录过程在我们自己的服务器上工作,我们使用firebase实时聊天仅用于聊天目的,因此我们不使用任何firebase身份

  • 问题内容: 我使用 惰性连接 来连接到数据库对象中的数据库。从根本上讲,这意味着直到处理完第一个查询后,它才会调用mysql_connect(),并且此后它随后将跳过重新连接。 现在,我的数据库类中有一个方法,该方法几乎可以调用和设置(因此该方法将知道再次连接到数据库)。应该在每个查询之后(作为私有函数)还是通过对象从外部调用此方法……因为我在想类似的东西(代码仅是示例) 现在,如果它在每次查询后

  • 在我的项目中,我希望用户从Firebase实时数据中读取数据,同时他会将数据标记为锁定,直到他完成一些操作,在此期间其他用户无法读取此数据。 如果无法锁定,另一种情况是一旦他读取他同时写入一些数据以指示该数据已锁定。如果另一个用户读取此数据,他知道它已锁定。 我不确定这在火力基地是否可能。 有没有任何想法如何使用firebase实时数据库这个。