【问题标题】:How does Firebase Database Instances retrieve data in realtime?Firebase 数据库实例如何实时检索数据?
【发布时间】:2017-04-04 02:06:27
【问题描述】:

我刚刚构建了我的第一个应用程序。这是我使用 Firebase 实时数据库的群组消息传递应用程序。我按照this 教程构建了我的应用程序。

聊天完美无缺且实时进行,即数据库中的任何更改都会在几秒钟内检索并反映在我的应用程序上。实际上,有点好奇,我不只是复制粘贴所有这些代码行,而是试图理解每个语句背后的含义。所以,我对我的一个疑问感到困惑:

这是如何实时工作的(聊天立即弹出)?我正在阅读有关 Firebase 数据库 here 的信息,他们提到 ValueEventListener 用于实时更新应用数据,但这里使用的是什么?

【问题讨论】:

  • 发布-订阅模型 - 您的应用等待更新,Firebase 在更新发生时通过网络连接通知设备。
  • 另外值得一提的是:Firebebase 数据库(前端和后端)使用WebSockets,这使客户端能够通过网络订阅服务器中的更改。
  • 你们俩都很棒。谁想把它变成答案?
  • @cricket_007 非常感谢。您能否在负责与服务器同步的代码中命名类/对象/函数?我的意思是应该有一些代码语句负责这个,比如上面提到的ValueEventListener?声明FirebaseDatabase 的对象是否包括在其中同步?如果您发布对此的答案并尽可能提供更深入的信息,那就太好了。
  • @ArneHugo 见上文。谢谢。 :)

标签: android firebase firebase-realtime-database chat


【解决方案1】:

来自documentation

实时:与典型的 HTTP 请求不同,Firebase 实时数据库使用数据同步 - 每次数据更改时,任何连接的设备都会在几毫秒内收到更新。

在网络方面,这是通过WebSockets 实现的,它在服务器端和客户端 Firebase 库中都使用。

此外,“实时数据库 API 旨在仅允许可以快速执行的操作”。

编辑: Firebase 客户端库设置了一个 WebSocket 与实时数据库通信,用于与实时数据库的所有通信,包括读取/订阅和更新/推送(除非您使用REST API)。

编辑 2:the tutorial you did 中,您使用了 FirebaseListAdapter,它抽象出了数据同步的完成方式。它的第四个参数是对实时 Firebase 数据库位置的引用,它将与之同步(使用 WebSocktes),并为您填充列表。它获取同步数据的每个条目,并将其放入您作为第二个参数提供的模型类的新 Java 对象中,即 ChatMessage.class。

【讨论】:

  • 谢谢你,@ArneHugo。如果 FirebaseDatabse 库本身包含同步,那么为什么在 Firebase 自己的博客中使用 ValueEventListener(您的文档链接中的 Android 设置)?只是好奇以明确概念。
  • A ValueEventListener 只是一个 Java 对象,负责通过它接收更新 (DataSnapshots)。这是onDataChanged 方法。
  • 好的。但是,我的疑问是,为什么当 firebase 库本身包含同步功能时,firebase 文档会包含它?我希望你现在明白我的问题了。
  • 我不太明白。如果没有像 ValueEventListener 这样的类,你如何想象它可以工作?您需要提供一个可以接收更新的类或方法,否则 Firebase 将不知道您想对它们做什么。
  • 这就是查询的原因。 ValueEventListener 在我的链接 [2] 中使用,但我用来实现数据库的代码不使用该类/方法,并且仍然实时同步工作。我在链接 [1] 的代码中要求对此负责的方法或类
猜你喜欢
  • 2017-10-06
  • 2018-09-11
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2019-04-16
相关资源
最近更新 更多