web-dev-qa-db-ja.com

バックエンドがユーザーに表示されるUIと同期しなくなった場合はどうすればよいですか?

問題

  • ライブデータフィードがあります
  • ユーザーはホームページに50項目をロードし、さらにロードをクリックして無限にスクロールします
  • 新しいデータが1分ごとに届くので、この新しいデータもWebソケットを介して各ユーザーにプッシュします
  • ユーザーは一時的に切断される可能性があり、いくつかの更新を見逃してから、再接続できます。その場合、バックエンドと同期が取れていません。
  • 私がこの問題を修正すると思った方法は、UIにある最後のアイテムのタイムスタンプを取得することです
  • 接続が開くたびに、そのタイムスタンプから現在の時刻までのすべてのアイテムを各ユーザーに送信します
  • ただし、ここにはリスクがあります
  • アップグレードを行っているときにサーバーがメンテナンスのために数時間ダウンする可能性があり、再接続時に各ユーザーに10000アイテムを送信する必要があるため、サーバーがクラッシュする可能性があります
  • 私が考えた救済策は、制限時間を4時間とすることです。ユーザーが最後にUIを使用してから4時間以上経過している場合は、UIを完全にリセットします。

だから問題は、私はこれにどのように対処するのですか?

  1. 何もしないでください。サーバーがクラッシュするリスクがあります。
  2. 画面上で1000アイテムを下にスクロールしても、ユーザーに尋ねずにユーザーのUIを完全にクリアする
  3. たとえば50アイテム程度の制限を維持して、それらの50アイテムを送信します。4時間以上経過している場合は、同期していない可能性があり、ページを更新する必要があることをユーザーに伝えます。
  4. 助言がありますか?
3
PirateApp
  • アプリ/サービス/ウェブサイトの現在の状態をユーザーに明確に伝える
  • 失われたデータをすべてのユーザーに送信しないでください
  • 失われたデータを取得するためのボタンを追加する

このようにして、データを必要とするユーザーはデータを取得し、バックエンドに負荷をかけません。 enter image description here

4
Pavlo Grubyi