Skip to content
This repository was archived by the owner on Apr 12, 2023. It is now read-only.
This repository was archived by the owner on Apr 12, 2023. It is now read-only.

ETag による通信量削減 #199

@i-maruyama

Description

@i-maruyama

その機能リクエストは何らかの問題に関連しますか / Is your feature request related to a problem?

  1. 接触確認毎に毎回TEKリストを DLし、無駄な通信量が多い問題。
  2. CDN サーバーは ETag を付与しているが、有効活用していない問題。

なお接触確認が走る頻度はバックグラウンド (6 時間毎) あるいは, 手動によるホームページ再表示毎です. URL は https://covid19radar-jpn-prod.azureedge.net/c19r/440/list.json です. zip に比べれば対した通信量ではないと思いますが、電源消費も抑えられるかもしれません。

解決策についてお書きください / Describe the solution you'd like

  • ETag を利用し通信量を削減する

現在は、 TEK リストは毎回 DL し、 LastProcessTekTimestamp より新しい TEK(zip) をDL して接触確認し、成功すれば LastProcessTekTimestamp を更新しています。 以下では、サーバーが付与する ETag をローカルに保存して、 ETag が違えば DL する通信(If-None-Match)を行う実装案を紹介します。重要なのは、 LastProcessTekTimestamp と同じタイミングで ローカル ETag を更新することです。もし、 接触確認失敗のときに、 ローカル ETag だけ更新すると TEK リストが DL されなくなり、 ETag がサーバー側で更新されるまで(現状では1日)接触確認できなくなります。それを考慮した実装案が以下です。

  1. ETag 利用のため, HttpDataService.cs (GetCdnAsync) を改変します. ETagの一時的なやり取りは Xamarin.Essentials.PreferenceKey を用います。
  2. ETag 保存のため, LastProcessTekTimestamp と同じ枠組みを使います。対応のため改変するのは2ファイルです
    -- PreferenceKey.cs (PreferenceKey.ETag追加)
    -- ExposureNotificationService.cs (Get&Set method追加。及び RemoveLastProcessTekTimestamp の中で ETag も 消去し再DL可能に)
  3. ETag 更新のため, ExposureNotificationHandler.cs を改変します

あなたが考える代替案についてご説明ください / Describe alternatives you've considered

  • (今後サーバー側の ETag 不対応等がある場合など) Last-Modified と If-Modified-Since を使う.

1日様子を見た範囲(Android)では、ETag は機能していそうです(以下のスクショ)。もう少し様子を見ます。

  • ETag の一時的なやり取りをXamarin.Essentials.PreferenceKey 以外を使う

アドバイスあれば。

その他 / Additional context

ETag


Internal Tracking Code: NFR 2527

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed開発内部管理用enhancement新しい機能や改善のリクエスト

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions