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

火灾发生时,什么时候断开连接?

华善
2023-03-14

我将Firebase后端用于我的android应用程序。我想为我的聊天建立一个用户状态系统。为此,我采用了Firebase指南中的模式

final Firebase myConnectionsRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/connections");

// stores the timestamp of my last disconnect (the last time I was seen online)
final Firebase lastOnlineRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/lastOnline");

final Firebase connectedRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      // add this device to my connections list
      // this value could contain info about the device or a timestamp too
      Firebase con = myConnectionsRef.push();
      con.setValue(Boolean.TRUE);

      // when this device disconnects, remove it
      con.onDisconnect().removeValue();

      // when I disconnect, update the last time I was seen online
      lastOnlineRef.onDisconnect().setValue(ServerValue.TIMESTAMP);
    }
  }

  @Override
  public void onCancelled(FirebaseError error) {
    System.err.println("Listener was cancelled at .info/connected");
  }
});

麻烦的是我不知道什么时候会触发断开连接事件?!

每次我打开应用程序时,我都会将TRUE写入节点“用户/joe/连接”,但是当我关闭应用程序时,不会发生任何事情。当我关闭WIFI时,布尔参数也不会被删除。onDisconnect 事件仅在我强制停止应用程序或重新安装此应用程序时触发,或者当我无法确定时。

所以,据我所知,我必须手动处理此类事件:

1)关闭我的应用程序;

2)关闭WiFi

3) 也许是别的什么

用于在我的应用中创建状态功能?但是,什么时候有断开连接事件被触发?

共有2个答案

宫子晋
2023-03-14

当用户退出应用程序时,您可以调用 admin.database().goOffline() 以显式断开与火库的连接,这应该会触发 onDisconnect 回调。当用户返回应用程序时,只需调用 admin.database().goOnline() 以重新连接到火库。

田博远
2023-03-14

当客户端和服务器断开连接时,可能会出现两种情况:

  1. 客户端显式断开与服务器的连接
  2. 客户端只是消失了

当您终止应用程序时,您将触发显式断开连接。在这种情况下,客户端将向服务器发送一个信号,表明它正在断开连接,服务器将立即执行 onDisconnect 回调。

当你关闭 wifi 时,你的应用没有机会告诉服务器它正在断开连接。在这种情况下,一旦服务器检测到客户端不见,就会触发连接。这可能需要几分钟时间,具体取决于套接字超时的配置方式。所以在这种情况下,你只需要多一点耐心。

如果这个间隔对您来说不够精细,您所能做的就是定期、较短的间隔更新数据库中的所谓保持活动值。这样,您就可以查看客户端最近一次活动的时间,如果时间太长,则采取行动。

 类似资料:
  • 本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 我认为UML Designer8应该在7月份发布,包括UML生成器。到目前为止我还找不到它。 谁知道什么时候上映?

  • 我有一个Android应用程序,每个屏幕分辨率包含大约150个图标。 如果我把所有图标放在所有5个主要分辨率(ldpi、mdpi、hdpi、xhdpi、xxhdpi)中,那么图标总数将达到750个。这有几个缺点: 大APK大小 将dexGuard与ant构建脚本一起使用时构建过程缓慢。它对图像进行一些处理需要一些时间。 或者,我可以只在一些分辨率中放置图标。例如,ldpi设备现在仅占市场的10%,

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我想要的不是Redis和MongoDB之间的比较。我知道他们是不同的。性能和API完全不同。 Redis的速度非常快,但是API的“原子性”非常好。MongoDB将占用更多资源,但是该API非常易于使用,对此我感到非常满意。 它们都很棒,我想在部署中尽可能多地使用Redis,但是很难编写代码。我想在开发中尽可能多地使用MongoDB,但是它需要一台昂贵的机器。 那么您如何看待两者的使用