我不知道这是否是一个非常基本的问题。我正在尝试将Firebase添加到我的Web应用服务器端(JAVA),而不是Android项目。我的目标是推动客户端更新,以便对特定实体进行一些更改。我使用appengine作为数据库。因此,当实体更新时,我需要推送实时数据库,客户端(浏览器)侦听更新的节点。我试图从java建立连接开始。下面写了这段代码。连接到db,但几秒钟后它就会断开连接。
我非常感谢任何帮助。用Javascript成功实现但是在JAVA结束时挣扎。提前谢谢。
@SuppressWarnings(
{ "unchecked" , "rawtypes" } )
public static void initiateFirebaseDB() throws FileNotFoundException
{
if ( FirebaseApp.getApps().isEmpty() )
{
AccessController.doPrivileged( new PrivilegedAction()
{
public Object run()
{
FileInputStream serviceAccount = null;
try
{
serviceAccount = new FileInputStream( /* path to the json file */ );
}
catch ( FileNotFoundException e )
{
e.printStackTrace();
}
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential( FirebaseCredentials.fromCertificate( serviceAccount ) )
.setDatabaseUrl( /* db url */ ).build();
FirebaseApp.initializeApp( options );
return null;
}
} );
}
DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference( ".info/connected" );
connectedRef.addValueEventListener( new ValueEventListener()
{
@Override
public void onDataChange( DataSnapshot snapshot )
{
boolean connected = snapshot.getValue( Boolean.class );
if ( connected )
System.out.println( "connected" );
else
{
System.out.println( "not connected" );
}
}
@Override
public void onCancelled( DatabaseError error )
{
System.err.println( "Listener was cancelled" );
}
} );
}
答案 0 :(得分:1)
跟踪连接状态主要用于移动应用,甚至不用于与Firebase相关的任务,因为它是检测这些应用中的网络连接状态更改的好方法。这在移动设备中通常是一项重要但难以获得的正确任务,因此这基本上是Firebase为这些开发者提供额外服务。它根本不是一个要求,并且编写了大量不会听取此值的应用程序。
Firebase数据库服务旨在被视为"魔法" singleton:你应该把你的代码写成"它只是工作"。有些调用确实能够报告错误,在这种情况下你应该处理它们。但总的来说,在编码处理数据更新时,您不应该花太多/任何时间考虑与服务器的连接。做这些,他们应该工作。
Firebase也是一个"最终是一致的","最后写的胜利"数据库,你应该围绕这个概念构建你正在做的事情。在News Rush,我们经常用新的(服务器端)覆盖现有值,而无需检查是否需要更新。假设您的服务器节点已经死亡并且必须重新启动,或者存在网络错误并且更新已被删除且无法恢复?假设写入被拒绝,因为另一个写入首先到达那里?
Firebase没有提供确定通过内容的机制。写作比你想象的要多一些,可以提供一种自我治疗的措施"到你的应用程序。别忘了,Firebase的一大特色是大规模/容量。这不是一个很好的,它是一个真正的功能,你应该在这里利用它。