1

caldav と同期レポートを使用して syn を実装しようとしていますが、複数のクライアントとサーバー間で 1 つのカレンダー (1 つの VEVENT) を同期する方法について概念的な問題があります。

ほとんどの RFC は、リソースが最後に同期されてから変更されたかどうかを判断するために etag を使用することを参照しています。(etag が変更された場合、リソースは最後の同期以降に変更されています)。私が得ること。ただし、どの変更が最近のものかをどのように知ることができますか?

たとえば、クライアント A の ical 'X' は午前 1 時に最後に編集され、午前 8 時に同期されます。クライアント B には、午前 2 時に編集し、午前 7 時に同期するバージョンの ical X もあります。したがって、B は A よりも新しく、B は A の前に同期されます。

A が同期すると、B の新しいバージョンの X が表示されます。etag から、X が変更されたことはわかりますが、「いつ」はわかりません。Bの方が新しいので、AはBで上書きする必要があると思います(または、少なくともBの方が新しいとユーザーに促すことができます)...この仮定は正しいですか/この状況を処理する標準的な方法はありますか?

一般的に問題となるのは、サーバーとクライアントの間でどのファイルがより新しいかを把握しようとするときです。etag は「変更済み」のみを検出でき、「新しい」は検出できません。最終更新日は、クライアントでの最終編集日ではなく、icals のアップロード日を反映しているようです。これにより、何かが欠けていると信じるようになります。同期のための一般的に受け入れられているアルゴリズムはありますか?

4

2 に答える 2

1

最終編集日は、ここでの方程式の一部にすぎません。より意味のあるのは、実際の変更です。デバイス B のアラームをオフにして (わずかな変更)、デバイス A から開始日を変更した (大幅な変更) 可能性があります。したがって、行儀の良いクライアントは、この 2 つをマージするために最善を尽くす必要があります。一部のクライアントは、イベントが編集されたことを通知するだけで、どちらのコピーを保持するかを尋ねてきますが、並べて比較する UI がないと、エンド ユーザーにとって非常に混乱します。マージ メカニズムがなければ、etag を無視して常に上書きします。

最後に、イベントのスケジュール タグについても考慮する必要があります ( https://www.rfc-editor.org/rfc/rfc6638#section-3.2.10を参照)。

于 2013-02-15T08:07:17.377 に答える