アプリとサーバーのさまざまなインスタンス間でいくつかの設定を伝播する単純な同期ソリューションを実装しようとしています。これらの設定への変更はまれであり、クライアント上でのみ行われます。船外に出ることなく、適度に堅牢なものが欲しい.
私の戦略は、デバイスで同期されていない変更を追跡し、同期するときにこれらをサーバーに投稿することです。サーバーは、その設定の以前の既知の同期の後に発生した変更を拒否できる必要があります。これを達成するために、アプリは各設定の「更新日」を保存し、サーバーはこれを、同じ設定に対して保存されている同様のフィールドと比較します。クライアントの日付が、サーバーが認識している (別のデバイスからの) 最新の設定同期よりも前である場合、その設定の同期は拒否されます。
最後の (できれば) 部分は、クライアントとサーバーのクロックの違いを説明することです。
私の最初の考えは、クライアントの現在のローカル日時を (更新された設定と共に) 送信することです。受信すると、サーバーはクライアントの時刻を自分の時刻と比較し、クライアントの設定で「更新された」タイムスタンプを調整する方法を認識します。これは原則として私には理にかなっているように思えますが、次の 2 つの問題にどのように対処すればよいでしょうか?
- 同期を試みる前に設定が更新された後、クライアント デバイスのクロックが変更された場合はどうなりますか?
- 同期要求がサーバーに到達するまでにかかる時間を誰が知っていますか? そのため、受信するまでに、クライアントが提供した「システム クロック」は、実際には数秒または数分ずれています。