4

Firebase の FAQ から:

ネットワーク接続が失われた場合、アプリはどうなりますか?

Firebase は、接続が回復するとすぐに Firebase サーバーに透過的に再接続します。それまでの間、アプリによってローカルで行われるすべての Firebase 操作は、すぐにイベントを発生させます (...)。接続が再確立されると、クライアントが現在のサーバーの状態に「追いつく」ように、適切な一連のイベントを受け取ります。

次に、オフラインにしてローカル データを変更し続け、オンラインに戻って他のクライアントが別の変更を行った場合はどうなりますか? 最後に救われるのはどっち?

サーバー上のデータが上書きされた場合、古いデータが新しいデータに置き換わる可能性があるということですか?

オンラインで追加された新しいデータが保持されている場合、オフライン中に送信されたデータが破棄されたことがわかりますか?

4

1 に答える 1

6

オフライン期間とデータの書き込みの後、クライアントがオンラインに戻ったとき、これらの変更の動作は、書き込みに使用した方法によって決まります。

  • set()setWithPriority()remove()およびpush()メソッドは最終書き込み優先です。これは、オフラインのクライアント A が t=0 で変更を行い、オンラインのクライアント B が t=10 で変更を行った場合、再接続時にオフラインのクライアント A の変更がクライアント B の変更を上書きすることを意味します。これは、Firebase 全体ではなく、行われた (つまり に設定された) 変更に特に適用されることに注意してください/a/b/c1
  • ただし、このtransaction()メソッドは、競合を処理するために特別に構築されています。オフラインのクライアント A が再接続すると、トランザクション更新関数が再実行され、新しい変更が Firebase データに適用されます。

ほとんどのアプリケーションでは、ユーザーはデータをリストに追加したり、個々のユーザー状態を変更したりしていますが、同じデータを変更することはありません。複数のユーザーが同じデータを変更している場合は、transaction()オフラインかどうかに関係なく使用する必要があります。

一般に、Firebase はオフラインとオンラインの切り替えを自動的に処理するように構築されているため、そのケースを検出して処理するためにアプリケーション コードを記述する必要はありません。

于 2013-11-14T18:30:31.277 に答える