Как на самом деле работает 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
этот метод запускается один раз, когда прослушиватель присоединен и снова каждый раз, когда данные, включая детей, изменяется.