0

オフライン データ アクセスをサポートする必要があるマルチクライアント アプリケーションの基本的な同期戦略を実装しています。この質問に対する彼の回答で@Chrisの提案を使用しています(読む必要はありません)。

追加したい詳細の 1 つは、同期された最後の変更ではなく、保存された最後の変更に基づいて競合を解決する機能です。つまり、2 つのクライアントが同じアイテムを更新した場合、他のクライアントが後で同期したとしても、最後に変更を保存したクライアントが優先されます。

明らかに、同期時にサーバー上のスタンプを比較できるように、クライアント上の各変更にタイムスタンプを付ける何らかの方法が必要です。ただし、各クライアントの内部クロックについてはあまり保証できません。

これを解決する確立された方法があるかどうか知りたいですか?シンプルなほど良い!

4

2 に答える 2

2

タイムスタンプだけに基づいてそれをやり遂げようとするのは嬉しくありません。適切なバージョン管理ソリューションを検討する必要があると思います。使用している言語などはわかりませんが、これを行うための完全なライブラリがあります。ライブラリが面白くなくても、独自のソリューションを構築するのに役立つドキュメントが見つかるかもしれません...かなり完全に説明されています...

プロジェクトはGitHubにあります。

于 2013-06-17T22:33:29.720 に答える
2

クライアント クロック ハイジャックについて質問している場合: クライアントは、サーバーから取得したタイムスタンプとローカル クロックから取得したタイム スパンに基づいて、独自の内部クロックを維持する必要があります。

したがって、「クライアントのタイムスタンプ」をサーバーに対して相対的に更新するだけです。

  • クライアント レコードには CT1 更新時刻があります。
  • CT2 の時点でサーバーに接続すると、サーバーの時刻が ST2 であることがわかります。
  • したがって、レコード更新時間は、ST1 = ST2 - CT2 + CT1 に変更されます。

もう 1 つの方法は、サーバー側で同じ変換を維持することです。(これはおそらくより正確で安全です)。

申し訳ありませんが、注意してください - 奇妙な部分は、それを「競合解決」と呼んでいることです。

于 2013-04-01T21:25:33.327 に答える