【问题标题】:Firebase / Node.js, correct usage of on.Disconnect()Firebase / Node.js,正确使用 on.Disconnect()
【发布时间】:2016-03-10 12:49:26
【问题描述】:

我有一个 node.js,它监控 Firebase 上的一个队列,用于发送 GCM 推送通知。工作正常。

它还通过.onDisconnect() 更新firebase 上的“在线”状态,因此可以轻松查看Node.js 服务器是否在线并运行。

问题:一段时间后,即使监听器仍处于连接状态且运行正常,它也会显示“断开连接”。

const NODESERVERONLINE="NodeSeverStatus";
var ref = new Firebase(FBURL+FBKEY_GCM_QUEUE);
ref.child("NODESERVERONLINE").set("Online");
ref.child("NODESERVERONLINE").onDisconnect().set("Offline!");

ref.on("child_added",function(snapshot, prevChild){
    If (snapshot.key()!=NODESERVERONLINE) DO_GCM_PUSH(snapshot.val());
  }, function(errorObject){
    console.log("Error reading Firebase: " + errorObject.code);
});

最初,监听器正在运行并且 -NodeSeverStatus 显示 Online。

但是“一段时间后”(几个小时),监听器仍然运行良好,队列正在处理中,但 NodeServerStatus 现在显示为 Offline。

我可以将在线/离线代码移动到侦听器本身中,但这似乎只是一个丑陋的 hack,如果在超时期限内没有新的队列帖子,大概仍然会遇到同样的问题。

这里的最佳做法是什么?谢谢。

【问题讨论】:

    标签: node.js firebase


    【解决方案1】:

    快速猜测是您的网络连接短暂中断。

    如果您的网络连接不稳定,服务器将检测到断开连接并设置Offline!

    客户端会自动重新连接,但你再也没有设置Online

    因此,您需要收听.info/connected 并在此处设置Online

    var ref = new Firebase("https://yours.firebaseio.com");
    ref.child("NODESERVERONLINE").onDisconnect().set("Offline!");
    ref.child(".info/connected").on("value", function(snapshot) {
      if (snapshot.val() === true) {
        ref.child("NODESERVERONLINE").set("Online");
      }
    });
    

    https://www.firebase.com/docs/web/guide/offline-capabilities.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 2020-09-12
      • 2014-10-19
      • 2015-01-08
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多