Каким образом приложение чата знает, что нужно извлечь из внутреннего сервера базы данных при создании нового сообщения? - PullRequest
0 голосов
/ 02 марта 2019

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

on = callback =>
        this.ref
          .limitToLast(20)
          .on('child_added', snapshot => callback(this.parse(snapshot)));
     }

Здесь всякий раз, когда в Firebase публикуется новое сообщение, обратный вызов в приложении будет синхронизироваться с базой данных Firebase и извлекать последние 20 сообщений.

Я понимаю, как работает push-уведомление, и знаю, что сообщение в приложении не является push-уведомлением.Но я не видел хорошей технической статьи, объясняющей, как в чате приложения синхронизируются сообщения между приложением и базой данных.Я бы подумал, что периодическое извлечение серверной базы данных из приложения будет не самым эффективным способом.

Вот еще код Firebase, связанный с кодом выше:

import firebase from 'firebase'; // 4.8.1

class Fire {
  constructor() {
    this.init();
    this.observeAuth();
  }

  init = () =>
    firebase.initializeApp({
      ....
    });

  observeAuth = () =>
    firebase.auth().onAuthStateChanged(this.onAuthStateChanged);

  onAuthStateChanged = user => {
    ...
  };

  get uid() {
    ...
  }

  get ref() {
    return firebase.database().ref('messages');
  }

  parse = snapshot => {
    ...
    return message;
  };

  on = callback =>
    this.ref
      .limitToLast(20)
      .on('child_added', snapshot => callback(this.parse(snapshot)));
 }

1 Ответ

0 голосов
/ 02 марта 2019

Когда вы присоединяете первого слушателя от клиента к базе данных, клиент открывает соединение через веб-сокет с сервером.Затем он отправляет запрос / справочную информацию на сервер, который, в свою очередь, загружает исходные данные (и отправляет их обратно) и регистрирует внутреннего слушателя на сервере для изменений.

С этого момента, если есть какие-либо измененияПосле установки соответствующих данных сервер сканирует список регистраций и отправляет обновления затронутым клиентам.Эти клиенты в свою очередь выдают правильные события, такие как child_added и child_removed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...