多个客户端之间的对象同步算法
问题描述:
我正在制作一个小对等应用程序,它包含一个通用的对象集合。这不是一个关于传输对象的套接字通信的问题,因为我已经对它进行了排序。多个客户端之间的对象同步算法
首先我不必担心冲突,因为客户端只能添加到对象集合中。但是我正在努力解决我的问题,如何通过谈判来确定他们需要向对方转移哪些对象。
我猜想这之前已经做过很多次,而且必须有某种同步算法有某处的......
任何想法?
UPDATE:
我想我询问是否有一种方法,而无需通过每个对等点的所有对象具有周期同步,并检查它们的存在,在另一端
答
如果您使用ObservableCollection
可执行INotifyPropertyChanged
的可序列化对象,则可以对对象进行排队,以便在更改对象时进行传输。如果您将需要同步的对象保留在HashSet
中,则可以避免线性排序为代价的队列中的重复条目。如果您仔细覆盖GetHashCode()
,或者甚至更好地创建一个返回较强散列的方法,则可以筛选出两端均等更改的项目。
编辑:对于初始同步,构建一个数据包,将所有当前对象的生成散列列为二进制块。这样交换很快。
答
分配一个GUID给每个对象,当你合并它们时,你不会将它们区分开来。还是我误解你的问题?
主要问题是,当我连接到另一个同伴时,是否必须遍历每一个对象以检查它们是否存在于两个对象上? – Tim 2009-07-23 00:04:46
是的,你必须通过较小的集合。 如果你可以把你正在搜索的字典收集,检查可以从O(n)到O(1)。 – 2009-07-23 00:29:36