我正在制作一个小型点对点应用程序,其中包含一个公共(public)对象集合。这不是关于传输对象的套接字通信的问题,因为我已经排序了。
首先,我不必担心冲突,因为客户端只能添加到对象集合中。但是我在脑海中努力想出客户端如何协商他们需要将哪些对象转移给彼此。
我猜这已经被做过很多次了,一定有某种同步算法在某处...
有什么想法吗?
更新:
我想我是在问是否有一种同步方法,而不必循环遍历每个对等点上的所有对象并检查它们是否存在于另一端
最佳答案
如果您使用实现INotifyPropertyChanged
的可序列化对象的ObservableCollection
,您可以在对象发生改变时将它们排队等待传输。如果将需要同步的对象保存在 HashSet
中,则可以以线性排序为代价避免队列中的重复项。如果您仔细重写 GetHashCode()
,或者甚至更好地创建一个返回更强散列的方法,您就可以过滤掉两端变化相同的项目。
编辑:对于初始同步,构建一个数据包,将所有当前对象的生成哈希列为二进制 block 。这样交换很快。
关于c# - 多个客户端之间的对象同步算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168870/