2009-07-22 12 views
1

私は共通のオブジェクトの集合を保持する小さなピアツーピアのアプリケーションを作っています。これは、私がソートしたオブジェクトを転送するソケット通信に関する質問ではありません。オブジェクト複数のクライアント間の同期化アルゴリズム

クライアントはオブジェクトコレクションにしか追加できないため、まずは競合について心配する必要はありません。しかし、私は、奴隷たちがどの物をどのように交渉してお互いに移す必要があるか、私の頭の中で解決しようとしています。

私はすべてのアイデアを、これは前に何度も行われてきたと思いますし、どこかにそこ同期アルゴリズムのいくつかの並べ替えがなければならない...

UPDATE:

私は各ピア上のすべてのオブジェクトを循環することなく、同期され、他端

答えて

1

INotifyPropertyChangedを実装しているシリアル化可能オブジェクトのObservableCollectionを使用する場合は、オブジェクトが変更されたときに送信用にキューに入れることができます。同期が必要なオブジェクトをHashSetに保存すると、線形順序を犠牲にしてキュー内の二重項目を避けることができます。慎重にGetHashCode()をオーバーライドしたり、より強力なハッシュを返すメソッドを作成したりすると、両端で均等に変更された項目を除外できます。

編集:初期同期のために、現在のすべてのオブジェクトの生成されたハッシュをバイナリブロックとしてリストするパケットを作成します。そうすれば、交換はすばやくできます。

+0

最初の同期と後の同期の違いは何ですか? – Tim

+0

あなたの見方によって異なります。特別な作業がなければ、同じですが、生成されるハッシュのセットにはさらに多くのマッチが必要です。 :) –

0

アサインで、彼らが存在することを確認する方法がある場合は、私が求めていると思います各オブジェクトにGUIDを渡し、それらをマージすると、それらを区別する問題はありません。あなたの質問を誤解していますか?

+0

主な問題は、別のピアに接続すると、1つのオブジェクトごとに循環して、両方に存在することを確認する必要があるということです。 – Tim

+0

はい、小さなコレクションを順番に調べる必要があります。 あなたが検索しているコレクションを辞書に入れることができれば、チェックはO(n)からO(1)に行くことができます。 –

関連する問題