值事件如何在使用 Firebase 侦听器的更新中发挥作用?



事件侦听器是否保证写入路径的所有数据最终都会传递给客户端? 例如,如果我有一个游戏客户端将移动一个接一个地推送到同一路径,侦听客户端会收到所有更新吗? 在这种情况下会发生什么:客户端 A 将移动 1 推送到客户端 B 正在侦听的游戏 1/user1/move_data;然后,客户端 A 立即推送另一个移动,更新 game1/user1/move_data 的值。 是否可以保证侦听客户端收到推送的所有移动?

目前,我有一个系统,该系统为每个移动创建一个新路径,然后当每个客户端在其状态下到达该移动时,我会在每次移动时调用单个侦听器。如果客户端 A 收到客户端 B 所做的最新移动,然后客户端 A 开始侦听尚不存在的路径,这似乎效率不高。

以下引文来自此链接: https://firebase.google.com/docs/database/admin/retrieve-data

"value 事件用于读取给定数据库路径上内容的静态快照,因为它们在读取事件时存在。它使用初始数据触发一次,每次数据更改时再次触发。事件回调将传递一个快照,其中包含该位置的所有数据,包括子数据。在上面的代码示例中,value 返回了应用中的所有博客文章。每次添加新的博客文章时,回调函数都会返回所有文章。

关于它们在读取事件时存在的部分使我认为,如果侦听器在路径上,那么客户端最终将接收该路径上的所有值。

担保部分还有这样一句话,我正在努力破译:

"值事件始终最后触发,并保证包含拍摄快照之前发生的任何其他事件的更新。">

我正在使用一种没有基于 Google 的 SDK 的语言,并且正在问这个问题,所以我可以进一步评估 Firebase 是否适合我的用途。

Firebase 实时数据库执行状态同步。如果客户端正在某个位置侦听数据,它将接收该数据的状态。如果数据发生更改,它将接收该数据的最新状态。

。如果我有一个游戏客户端将移动一个接一个地推送到同一路径,侦听客户端会收到所有更新吗?

如果在 Firebase 服务器有机会将状态发送给侦听器之前进行了多次更新,则可能会跳过一些中间值。因此,不能保证客户端会看到每个状态更改,只能保证它最终会看到最新状态。

如果要确保所有客户端(可以)看到所有状态更改,则应将状态更改本身存储在数据库中。

尝试使用以下代码从Firebase数据库获取更新值:-

mFirebaseInstance = FirebaseDatabase.getInstance();
mFirebaseDatabase = mFirebaseInstance.getReference();
mFirebaseDatabase.child("new_title").setValue("Realtime Database");
mFirebaseDatabase.child("new_title").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String appTitle = dataSnapshot.getValue().toString();
Log.e("Hey", appTitle);
title.setText(appTitle);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e("Hey", "Failed to read app title value.", error.toException());
}
});

最新更新