我正在制作一个小型点对点应用程序,其中包含一个公共对象集合。这不是关于套接字通信以传输对象的问题,因为我已经排序了。
首先,我不必担心冲突,因为客户端只能添加到对象集合中。但我在脑海中苦苦思索,克伦特人是如何协商他们需要将哪些物品转移给彼此的。
我猜这之前已经做过很多次了,而且一定有某种同步算法存在于某个地方......
有任何想法吗?
更新:
我想我在问是否有一种方法可以同步,而不必循环遍历每个对等点上的所有对象并检查它们是否存在于另一端
我正在制作一个小型点对点应用程序,其中包含一个公共对象集合。这不是关于套接字通信以传输对象的问题,因为我已经排序了。
首先,我不必担心冲突,因为客户端只能添加到对象集合中。但我在脑海中苦苦思索,克伦特人是如何协商他们需要将哪些物品转移给彼此的。
我猜这之前已经做过很多次了,而且一定有某种同步算法存在于某个地方......
有任何想法吗?
更新:
我想我在问是否有一种方法可以同步,而不必循环遍历每个对等点上的所有对象并检查它们是否存在于另一端
如果您使用ObservableCollection
实现的可序列化对象INotifyPropertyChanged
,您可以在对象被更改时将其排队以进行传输。如果将需要同步的对象保留在 aHashSet
中,则可以避免队列中的重复条目,但会以线性排序为代价。如果您仔细覆盖GetHashCode()
,或者甚至更好地创建一个返回更强哈希的方法,您可以过滤掉两端变化相同的项目。
编辑:对于初始同步,构建一个数据包,将所有当前对象的生成哈希列为二进制块。这样交换很快。
为每个对象分配一个 guid,当您合并它们时,您不会遇到区分它们的问题。还是我误解了你的问题?