Как на самом деле работает Firebase listener?

Мне интересно на Android, как работает базовый фактический механизм при добавлении прослушивателя в базу данных. Это просто более частое дергание или что-то еще особенное?

обновление: Чтобы было понятнее, я понимаю, что такое слушатель, но я имел в виду, как работает схема "прослушивания", как клиент (Android) знает, что данные на сервере изменились. Это просто периодическая тяга? (и инженеры Firebase уже делают тяжелую работу, чтобы покрыть это и сделать это легко для нас).

похоже, firebase не является открытым исходным кодом.

// Attach an listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        System.out.println(snapshot.getValue());
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});

3 ответов


отказ от ответственности: это упрощенное описание того, как вещи работают на момент написания. Все может измениться к тому времени, как вы ее прочтете.

когда ваше приложение подключается к базе данных Firebase, оно открывает подключение веб-сокета с устройства на сервер Firebase. Это соединение остается открытым в течение всего срока службы вашего приложения или пока вы не позвоните goOffline().

при присоединении прослушивателя клиент отправляет местоположение (и потенциальные параметры запроса) в сервер. Сервер добавляет этот прослушиватель в список всех прослушивателей всех подключенных клиентов. Затем он также отправляет исходные данные для этих слушателей.

всякий раз, когда операция записи фиксируется в базе данных, сервер сканирует прослушиватели. Для каждого соответствующего прослушивателя сервер отправляет клиенту Обновление через открытый веб-сокет.


это происходит асинхронно

добавление прослушивателей в ссылку на узел приведет к асинхронному внесению любых изменений в ссылку на узел

void onDataChange (снимок DataSnapshot)

этот метод будет вызываться с моментальным снимком данных в этом месте. Он также будет вызываться каждый раз, когда данные изменяются.

void onCancelled (ошибка FirebaseError)

этот метод будет запущен в случае, если этот прослушиватель либо не удален на сервере, либо удален в результате правил безопасности и Firebase. Дополнительные сведения о защите данных см. В разделе Security Quickstart

пример

ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
    System.out.println(snapshot.getValue());
    Users users = snapshot.getValue(Users.class) //This is your POJO class
    String name = users.getName(); //Other getter methods to fetch data from firbase


}
@Override
public void onCancelled(FirebaseError firebaseError) {
    System.out.println("The read failed: " + firebaseError.getMessage());
}

});


Это объясняется в руководстве Firebase-получение данных на Android

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