1

我将 Firebase 用于具有多个用户的管理面板。每当添加新问题时,面板中的每个人都会立即收到警报。

它工作正常,但我实现它的方式感觉不对。这就是我正在做的事情:

dataRef.auth(token, function(error, result) {
    if (error) {
        console.log("Login Failed!", error);
    } else {
        var started = new Date();
        dataRef.on('child_added', function(snapshot) {
            var message = snapshot.val();
            var t = message.date.split(/[- :]/);
            var lastChildDate = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
            if(lastChildDate > started) {
                // alert the user
            }
        });
    }
});

这就是数据结构。它只有一个字段:

{date: "2013-06-14 16:45:10"}

这带来了该基地的所有记录。child_added所有记录都会触发一个事件。然后我检查它是否是在页面加载后创建的,并相应地提醒用户。但是客户端只需要提醒从现在开始添加的孩子。我怎样才能摆脱那些不必要的负担?我检查了文档,但找不到答案。

4

1 回答 1

1

有几种方法可以解决这个问题。

1) 将事件发生的时间戳编码在新子的优先级中,然后使用“startAt”修剪旧元素。

确保您的时间编码按时间顺序按字典顺序排序。

例如:

ref.startAt("2013-06-14 10:11:13").on(...);

生成带时间戳的项目时,您需要使用 Firebase 服务器时间,以便每个人都在同一个时钟下工作。请参阅 serverTimeOffset: https ://www.firebase.com/docs/managing-presence.html

2) 为每个用户设置不同的事件队列,并让用户的客户端在看到元素后从队列中删除元素。

此解决方案最适用于每个用户可能会收到不同通知的情况,例如在社交网络中。

于 2013-06-14T17:12:58.147 回答