Mas*_*ood 2 android firebase firebase-realtime-database
我想更改用户状态以显示他是否在线。当用户关闭应用程序或他与服务器失去连接时,我想在数据库中将用户状态更改为false 。 
作为名为onDisconnect()的方法,我已经使用该方法通过使用以下代码来更新用户状态。
HashMap<String,Object> user_online_status=new HashMap<String,Object>();
user_online_status.put("online",true);
DatabaseReference firebaseDatabase=FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
firebaseDatabase.updateChildren(user_online_status);
//then to show user offline
user_online_status.put("online",false);
firebaseDatabase.onDisconnect().updateChildren(user_online_status);
Run Code Online (Sandbox Code Playgroud)
我执行该任务,但是它是在客户端,如果我们要监视与服务器的用户连接以及连接终止时,应由服务器而不是客户端来更新节点。当用户断开与服务器的连接时,如何更改服务器的节点值?
用户可以通过两种方式与Firebase数据库断开连接。
在彻底断开连接的情况下,您的onDisconnect处理程序将立即触发,因此您的数据库将立即更新。
在断开连接很脏的情况下,Firebase依赖套接字层在远程客户端消失时发出信号。这可能需要几分钟的时间。但是最终,服务器将检测/确定客户端已消失,并且onDisconnect处理程序将触发。
数据结构中的一个小注释:用户与连接之间存在1:1的关系。不幸的是,事实并非如此。
onDisconnect则从该设备的设置将设置online为false它们仍然可以连接到另一设备上。onDisconnect处理器可以很久以后解雇,当你已经设置online到true新的连接。在这种情况下,挥之不去的onDisconnect处理程序将设置online为false用户可能已经重新连接时的状态。这就是说,您不应依赖于用户与其连接之间的1:1关系。Firebase文档中的示例将连接视为一个集合,并假定只要该用户push()剩下任何“连接ID”(由生成),便已连接该用户。我建议您执行同样的操作,以防止难以调试竞争条件和连接问题。
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |