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
            }
        });
    }
});

そして、これがデータ構造です。フィールドは 1 つだけです。

{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 に答える