检测Firebase连接是否丢失/重新获得

Kat*_*ato 60 firebase

是否有一种策略可以在当前的Firebase产品中运行,以检测服务器连接是否丢失和/或重新获得?

我正在考虑移动设备的一些离线意外事件,我想要一种可靠的方法来确定Firebase数据层何时可用.

Mic*_*uer 82

这是一个常见的功能,我们刚刚发布了API更新,让您这样做!

var firebaseRef = new Firebase('http://INSTANCE.firebaseio.com');
firebaseRef.child('.info/connected').on('value', function(connectedSnap) {
  if (connectedSnap.val() === true) {
    /* we're connected! */
  } else {
    /* we're disconnected! */
  }
});
Run Code Online (Sandbox Code Playgroud)

完整文档位于https://firebase.google.com/docs/database/web/offline-capabilities.

  • 嘿@Shawn,这是不幸的预期行为现在.对于给定的Firebase,客户端必须连接到特定的服务器.如果服务器出现故障,我们可以将Firebase移动到另一台服务器,但这是一个手动过程,因此您将看到客户端尝试连接到关闭服务器的一段时间.您可以预期这种行为(以及一般的正常运行时间)将在未来几个月内得到改善. (4认同)
  • 迈克尔,非常感谢.你的团队似乎总是领先一步. (3认同)
  • 您好,这段代码仍然有用吗?当我用setInterval进行测试时,我收到了“ connected”(连接)和“ not connected”(未连接)的回答。我的意思是我先是“未连接”,但过了一秒钟又切换到“已连接”,为什么? (2认同)

Bar*_*ris 14

更新: 对于许多与状态相关的功能,客户端可以知道它何时在线或离线.Firebase实时数据库客户端在/.info/connected上提供了一个特殊位置,每当客户端的连接状态发生更改时,该位置都会更新.这是一个例子:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      System.out.println("connected");
    } else {
      System.out.println("not connected");
    }
  }

  @Override
  public void onCancelled(DatabaseError error) {
    System.err.println("Listener was cancelled");
  }
});
Run Code Online (Sandbox Code Playgroud)


kno*_*nod 7

我想这在过去几个月里发生了变化.目前的说明如下:https: //firebase.google.com/docs/database/web/offline-capabilities

总结:

var presenceRef = firebase.database().ref("disconnectmessage");
// Write a string when this client loses connection
presenceRef.onDisconnect().set("I disconnected!");
Run Code Online (Sandbox Code Playgroud)

和:

var connectedRef = firebase.database().ref(".info/connected");
connectedRef.on("value", function(snap) {
  if (snap.val() === true) {
    alert("connected");
  } else {
    alert("not connected");
  }
});
Run Code Online (Sandbox Code Playgroud)

我承认我不太了解如何设置引用,或者这意味着什么(你是在凭空捏造它们还是你必须事先已经创建它们?)或哪一个会触发某些东西在服务器上,而不是在前端的东西,但如果你读到这个链接仍然是当前的,更多一点阅读可能会有所帮助.