2009-07-22 5 views
1

Je crée une petite application peer-to-peer qui contient une collection commune d'objets. Ce n'est pas une question sur les communications socket pour transférer les objets que j'ai triés. Pour commencer, je n'ai pas à m'inquiéter des conflits car les clients ne peuvent que l'ajouter à la collection d'objets. Mais j'ai du mal à comprendre dans ma tête comment les clans négocient quels objets ils doivent transférer entre eux.Synchronisation d'objets entre plusieurs clients Algorithme

Je suppose cela a été fait plusieurs fois auparavant, et il doit y avoir une sorte d'algorithme de synchronisation là quelque part ...

Toutes les idées?

MISE À JOUR:

Je suppose que je me demande s'il y a un moyen de synchroniser sans avoir à faire défiler tous les objets sur chaque poste et vérifier qu'ils existent à l'autre bout

Répondre

1

Si vous utilisez un ObservableCollection d'objets sérialisables implémentant INotifyPropertyChanged, vous pouvez mettre en file d'attente les objets à transmettre en cas de modification. Si vous conservez les objets nécessitant une synchronisation dans un HashSet, vous pouvez éviter les entrées doubles dans la file d'attente au détriment de l'ordre linéaire. Si vous remplacez soigneusement GetHashCode(), ou mieux encore créez une méthode qui renvoie un hachage plus fort, vous pouvez filtrer les éléments qui ont changé de manière égale aux deux extrémités.

Modifier: Pour la synchronisation initiale, créez un paquet qui répertorie les hachages générés de tous les objets en cours en tant que bloc binaire. De cette façon, l'échange est rapide.

+0

Quelle serait la différence entre la synchronisation initiale et les synchronisations ultérieures? – Tim

+0

Cela dépend de la façon dont vous le regardez. Sans travail particulier, c'est la même chose, mais l'ensemble des hachages générés devrait avoir beaucoup plus de correspondances. :) –

0

assign un guide pour chaque objet et quand vous les fusionnez, vous n'avez pas de problèmes pour les distinguer. ou suis-je mal compris votre question?

+0

Le problème principal est que lorsque je me connecte à un autre pair, dois-je faire défiler chaque objet pour vérifier qu'ils existent sur les deux? – Tim

+0

oui, vous devrez parcourir la plus petite collection. Si vous pouvez mettre la collection que vous cherchez dans un dictionnaire, la vérification peut aller de O (n) à O (1). –