Как событие value работает с обновлениями с помощью прослушивателей Firebase? - PullRequest
0 голосов
/ 31 мая 2019

Гарантируют ли слушатели событий, что все когда-либо записанные в путь данные будут в конечном итоге доставлены клиенту?Например, если у меня есть игровой клиент, который толкает ходы по одному и тому же пути один за другим, получит ли слушающий клиент все обновления?Что произойдет в этой ситуации: клиент A толкает ход 1 к game1 / user1 / move_data, который слушает клиент B;клиент A затем немедленно отправляет другой ход, обновляя значение в game1 / user1 / move_data.Будет ли гарантированный клиент-получатель получать все отправленные ходы?

В настоящее время у меня есть система, которая создает новый путь на каждый ход, а затем я вызываю одиночных слушателей на каждый ход, когда каждый клиент достигает этого движения в своем состоянии.Это не кажется эффективным, как если бы клиент A получил самое последнее движение, которое сделал клиент B, тогда клиент A начинает прослушивать путь, который еще не существует.

Ниже приведены цитаты из этой ссылки: https://firebase.google.com/docs/database/admin/retrieve-data

"Событие value используется для чтения статического снимка содержимого по заданному пути к базе данных, поскольку они существовали на моментсобытие чтения. Оно запускается один раз с начальными данными и снова при каждом изменении данных. Обратному вызову события передается моментальный снимок, содержащий все данные в этом месте, включая дочерние данные. В приведенном выше примере кода значение возвращало весь блогпосты в вашем приложении. Каждый раз, когда добавляется новый пост в блоге, функция обратного вызова возвращает все посты. "

Часть о том, как они существовали во время события чтения, заставляет меня думать, что еслислушатель находится на пути, тогда клиент, в конце концов, получит все значения, когда-либо находящиеся на этом пути.

Есть также строка из раздела гарантий, которую я пытаюсь расшифровать:

"События значенийвсегда срабатывает последним и гарантированно содержит обновления от любых других событий, которые произошли до этого снимкаs взято. "

Я работаю с языком, у которого нет sdk на основе Google, и задаю этот вопрос, чтобы я мог дополнительно оценить пригодность Firebases для моего использования.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

База данных Firebase Realtime выполняет состояние синхронизации . Если клиент прослушивает данные в местоположении, он получит состояние этих данных. Если в данных есть изменения, он получит самое последнее состояние этих данных.

... если у меня игровой клиент, который нажимает, перемещается по одному и тому же пути один за другим, получит ли слушающий клиент все обновления?

Если существует несколько обновлений, прежде чем сервер Firebase сможет отправить состояние слушателю, он может пропустить некоторые промежуточные значения. Таким образом, нет гарантии, что ваш клиент будет видеть каждое изменение состояния, есть только гарантия, что он в конечном итоге увидит последнее состояние.

Если вы хотите, чтобы все клиенты (могли) видеть все изменения состояния, вы должны сами хранить изменения состояния в базе данных.

0 голосов
/ 31 мая 2019

попробуйте этот код, чтобы получить значение обновления из базы данных 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());
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...