2

こいつが全然分からん。サーバーから取得される JSON としてシリアル化された製品があり、製品情報が Android アプリによって受信されると、ファイル システムにローカルに保存されると仮定すると、次のことをどのように達成できますか?

サーバーから送信された製品のリストがあるとしましょう (たとえば、最高評価の製品や検索結果など)。現在デバイスに保存されていないオブジェクトの完全なjsonデータのみをサーバーに送信できるようにしたいのですが、それ以外の場合は製品のIDのみです。デバイスに保存されている製品のリストを送信することもできますが、明らかに目的に反します。また、サーバーから製品 ID のリストを送り返すだけで、デバイスはそこから必要なものを要求できます。これは 1 つのリクエストを複数のリクエストに変換するため、理想的ではありません。これらは、この時点で私が考えることができる唯一の2つのオプションです.

さらに、製品jsonの30個程度のフィールドのうち、1つまたは2つが変更されている可能性があります(価格または評価)。製品全体または特定のフィールドを送信せずに、変更されたかどうかを確認するにはどうすればよいですか? 現在、json の md5 を使用して製品 ID を送信しています。デバイス上のものと一致する場合は送信しませんが、2 つのハッシュが一致しない場合は送信しません。繰り返しますが、これが最良のシナリオかもしれないと思いますが、よくわかりません。

4

2 に答える 2

2

サーバー上のアプリの状態を追跡する必要があります。これは、アプリがサインインする必要があることを意味します(または、これが特定のクライアント「インスタンス」であることを知るために使用される一意のトークンをサーバーが渡すことができるようにする必要があります)。次に、アプリはサーバーに、既に持っている ID を伝える (またはサーバーからすべて取得する) 必要があります。サーバーは、クライアントに送信された ID を常に記録する必要があります (または、アプリから通知された ID を記録します)。サーバーへの各呼び出しにはトークンを伴う必要があるため、サーバーはその時点での状態を簡単に知ることができます (ログアウト、タイムアウト、または他の方法でトークンを無効にしない限り)。

于 2012-10-24T22:31:19.187 に答える
1

できることの 1 つは、通常一緒に変化するフィールドのハッシュを分離することです。たとえば、(価格、評価) のハッシュと、オブジェクト自体を説明するフィールドの別のハッシュを作成できます。その後、デバイスは、更新が必要な一連のフィールドのみを要求できます。

もう 1 つの方法は、ハッシュの代わりに 32 ビットの UNIX タイムスタンプを使用することです。一貫性があり、オブジェクトを 1 秒に 2 回以上更新しないと仮定すると、128 ビットの MD5 サムと比較して、帯域幅をいくらか節約できます。

于 2012-10-24T22:31:53.810 に答える