3

我正在制作一个网络应用程序原型,以使用 Firebase 库持续监控我的巢穴的更新,我想讨论一下实现它的方法。Nest 有使用用户端 JavaScript 的移动应用程序和 Web 应用程序的示例供 Nest 开发人员使用,但没有使用 node.js 实现持续监控的示例。我希望在这里讨论一些想法,而不是一个工作示例。

举个我想做的例子:如果我的烟雾报警器响了,我想向我和我的家人发送一封电子邮件(发出爆炸的机制并不重要)。我正在使用 node.js 和 express.js,我不想让网页保持打开状态来监控我的家。因此我想在服务器端实现我的监控。

我目前的计划是将功能合并到我在路由控制器中使用的类中,以便用户可以向 URL 发出请求以激活监控,并在用户离开网站后保持连接和相关数据。在我的测试中,网络应用程序在我断开连接后会继续监视我的巢穴,但我不确定连接是否最终会超时。无论如何,连接问题很常见,所以无论如何我都需要解决这个问题。

所以这里是我正在考虑的一般问题:

将监控代码放在路由/控制器中是否合适?或者另一个框架,比如 Ruby on Rails(我看到了一些关于使用 RESTful 流的东西),是否更适合持续监控?

应该如何存储监控连接的开销数据(如 device_ID)?有没有比创建“连接”对象更好的方法来存储开销数据?

最后,监控连接最终会超时吗?无论如何,有什么方法可以重新建立中断的连接(我阅读了 的文档.onDisconnect,但它不允许自定义回调)?

4

2 回答 2

4

我编写了几个 node.js 服务器,它们保持与 Firebase 的持久连接,并在相关数据发生变化时采取行动。我认为这太棒了。Firebase API 在服务器和客户端上几乎相同,因此您可以像往常一样订阅数据,但您也可以(可选)提供身份验证密钥并对整个数据库进行完全访问/控制:

Firebase = require("firebase")
ref = new Firebase("https://<my firebase>.firebaseio.com")
ref.auth(<my key>)

ref.child("smoke-status").on("value", function(snap) {
  if (snap.val() == "FIRE") {
    // send email
  }
})
于 2014-08-09T03:55:47.990 回答
0

Firebase 使用连接 - 您打开连接并收听您在根目录中设置的任何 url。需要从触发动作的设备和需要通知的设备打开连接。

我认为您可能正在寻找的是Firebase.goOnline()Firebase.goOffline(),结帐文档

触发动作的设备可以goOnline在动作发生时更新 Firebase。

在客户端,您的选择受到限制,因为客户端正在侦听任何更新,并且只能在连接打开时完成。您可以做出妥协,goOnline每 5 分钟 20 秒收集更新。

于 2014-07-28T23:19:12.257 回答