生成新消息时,聊天应用程序如何知道从后端数据库服务器中提取消息?

时间:2019-03-02 00:22:32

标签: firebase react-native firebase-realtime-database

这是使用Firebase开发的聊天应用程序中的一小段代码,并且可以进行本地响应。

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

这里,每当有新消息发布到Firebase时,应用程序中的回调将与firebase数据库同步并检索最后20条消息。

我了解推送通知的工作原理,并且知道应用内消息不是推送通知。但是我没有看到一篇很好的技术文章来解释前端应用程序和后端数据库之间如何同步应用程序内聊天消息。我认为从应用程序定期提取后端数据库服务器不是最有效的方法。

还有更多与上述代码关联的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 :(得分:1)

当您将第一个侦听器从客户端附加到数据库时,客户端将打开与服务器的Web套接字连接。然后,它将查询/引用详细信息发送到服务器,服务器再加载初始数据(并将其发送回),并在服务器上注册内部侦听器以进行更改。

从那时起,如果对相关数据进行了任何更改,则服务器将扫描注册列表,并将更新发送给受影响的客户端。这些客户依次引发正确的事件,例如child_addedchild_removed