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 のアップロード日を反映しているようです。これにより、何かが欠けていると信じるようになります。同期のための一般的に受け入れられているアルゴリズムはありますか?