如何检查每个服务器请求的Firebase连接?我该如何重新连接?

时间:2017-03-07 15:09:45

标签: java firebase firebase-realtime-database

我不知道这是否是一个非常基本的问题。我正在尝试将Firebase添加到我的Web应用服务器端(JAVA),而不是Android项目。我的目标是推动客户端更新,以便对特定实体进行一些更改。我使用appengine作为数据库。因此,当实体更新时,我需要推送实时数据库,客户端(浏览器)侦听更新的节点。我试图从java建立连接开始。下面写了这段代码。连接到db,但几秒钟后它就会断开连接。

  1. 我应该再次初始化应用程序吗?
  2. 此外,一旦连接到Firebase,我是否必须检查连接是否仍处于活动状态并推送到Firebase?每次请求都必须重复吗?
  3. 有没有更好的方法来写这个?
  4. 我非常感谢任何帮助。用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" );
                            }
                    } );
            }
    

1 个答案:

答案 0 :(得分:1)

跟踪连接状态主要用于移动应用,甚至不用于与Firebase相关的任务,因为它是检测这些应用中的网络连接状态更改的好方法。这在移动设备中通常是一项重要但难以获得的正确任务,因此这基本上是Firebase为这些开发者提供额外服务。它根本不是一个要求,并且编写了大量不会听取此值的应用程序。

Firebase数据库服务旨在被视为"魔法" singleton:你应该把你的代码写成"它只是工作"。有些调用确实能够报告错误,在这种情况下你应该处理它们。但总的来说,在编码处理数据更新时,您不应该花太多/任何时间考虑与服务器的连接。做这些,他们应该工作。

Firebase也是一个"最终是一致的","最后写的胜利"数据库,你应该围绕这个概念构建你正在做的事情。在News Rush,我们经常用新的(服务器端)覆盖现有值,而无需检查是否需要更新。假设您的服务器节点已经死亡并且必须重新启动,或者存在网络错误并且更新已被删除且无法恢复?假设写入被拒绝,因为另一个写入首先到达那里?

Firebase没有提供确定通过内容的机制。写作比你想象的要多一些,可以提供一种自我治疗的措施"到你的应用程序。别忘了,Firebase的一大特色是大规模/容量。这不是一个很好的,它是一个真正的功能,你应该在这里利用它。