2009-07-22 6 views
1

Ich mache eine kleine Peer-to-Peer-App, die eine gemeinsame Sammlung von Objekten enthält. Dies ist keine Frage über die Socket-Kommunikation, um die Objekte zu übertragen, da ich diese sortiert habe.Objekt Syncronisation zwischen mehreren Clients Algorithmus

Zu Beginn muss ich mich nicht um Konflikte kümmern, da die Clients nur zur Objektkollektion hinzufügen können. Aber ich kämpfe darum, in meinem Kopf zu trainieren, wie die Clents aushandeln, welche Objekte sie zueinander übertragen müssen.

Ich würde vermuten, das schon viele Male zuvor getan wurde, und es muss eine Art von Sync-Algorithmus irgendwo da draußen ...

Irgendwelche Ideen?

UPDATE:

Ich glaube, ich bin zu fragen, ob es ein Weg, ohne dass durch alle Objekte auf jedem Peer zu synchronisiert ist und prüfen, ob sie

Antwort

1

Wenn Sie ObservableCollection serialisierbare Objekte verwenden, die INotifyPropertyChanged implementieren, können Sie die Objekte für die Übertragung in die Warteschlange stellen, wenn sie geändert werden. Wenn Sie die Objekte, die eine Synchronisierung benötigen, in einem HashSet behalten, können Sie doppelte Einträge in der Warteschlange auf Kosten der linearen Reihenfolge vermeiden. Wenn Sie GetHashCode() sorgfältig überschreiben, oder noch besser eine Methode erstellen, die einen stärkeren Hashwert zurückgibt, können Sie Elemente ausfiltern, die sich an beiden Enden gleichermaßen geändert haben.

Bearbeiten: Erstellen Sie für die anfängliche Synchronisierung ein Paket, das die generierten Hashwerte aller aktuellen Objekte als Binärblock auflistet. So ist der Austausch schnell.

+0

Was wäre der Unterschied zwischen der anfänglichen Synchronisierung und späteren Synchronisierungen? – Tim

+0

Es hängt davon ab, wie Sie es betrachten. Ohne besondere Arbeit ist es dasselbe, aber die Menge generierter Hashes sollte viel mehr Übereinstimmungen haben. :) –

0

assign am anderen Ende bestehen ein Leitfaden für jedes Objekt und wenn Sie sie zusammenführen, haben Sie keine Probleme, sie voneinander zu unterscheiden. oder missverstehe ich deine frage?

+0

Das Hauptproblem ist, dass, wenn ich eine Verbindung zu einem anderen Peer, muss ich durch jedes einzelne Objekt durchlaufen, um zu überprüfen, dass sie auf beiden existieren? – Tim

+0

Ja, Sie müssen durch die kleinere Sammlung radeln. Wenn Sie die Sammlung, die Sie suchen, in ein Wörterbuch setzen können, kann die Überprüfung von O (n) zu O (1) gehen. –

Verwandte Themen