用于从给定对象的服务器向客户端发送“仅更新字段”的模式/技术?

时间:2011-06-28 09:44:03

标签: c# design-patterns network-programming protobuf-net

我有一些服务器端数据,我需要从服务器应用程序复制(实时推送)到大约100个wpf客户端。我的问题是当一个给定的Order对象发生变化时,它通常只会更改1或2个字段,因此我只想通过线路发送这些更改而不是整个对象 - 从而减少了线路有效负载,处理时间等整个Order对象所具有的50个领域。

数据是OrderId上键入的Order对象字典。我使用protobuf-net来截取数据并通过网络发送给wpf客户端。

之前有没有人处理过这个问题?或者对于实现这一目标有什么想法?

非常感谢。

2 个答案:

答案 0 :(得分:0)

protobuf-net支持许多模式来帮助这种类型的场景,最简单的是(共享System.ComponentModel使用的模式):

[ProtoMember(1)]
public string Foo { get;set; }

public bool ShouldSerializeFoo() { /* return true if Foo is "dirty" */ }

这假设您有一些机制可以自己跟踪 (用于挂钩ShouldSerialize*方法); protobuf-net不会自行更改跟踪。如果您目前没有任何更改跟踪,则可以使用此答案中的内容:Comparing 2 objects and retrieve a list of fields with different values

答案 1 :(得分:0)

使用Castle.DynamicProxy创建一个简单的代理,它保存已更改的所有属性的名称。