Шаблон / методика отправки «обновленных только полей» с сервера на клиент для данного объекта? - PullRequest
3 голосов
/ 28 июня 2011

У меня есть некоторые серверные данные, которые мне нужно реплицировать (отправлять в режиме реального времени) из серверного приложения примерно на 100 клиентов wpf. Моя проблема заключается в том, что когда данный объект Order изменяется, он обычно меняет только 1 или 2 поля, поэтому я хочу отправить эти изменения только по проводам, а не по целому объекту - таким образом уменьшая полезную нагрузку по проводам, время обработки и т. Д., Поскольку весь объект Order имеет около 50 полей.

Данные представляют собой словарь объектов Order с ключом OrderId. Я использую protobuf-net для разделения данных и отправки по сети клиентам wpf.

Кто-нибудь имел дело с этой проблемой / проблемой раньше? Или есть идеи о том, кто этого достигнет?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Создайте простой прокси-сервер с помощью Castle.DynamicProxy, который сохраняет имя всех свойств, которые были изменены.

0 голосов
/ 28 июня 2011

protobuf-net поддерживает несколько шаблонов, чтобы помочь этому типу сценария, самое простое (чтобы поделиться шаблоном, используемым System.ComponentModel):

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

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

Предполагается, что у вас есть некоторый механизм для отслеживания изменений самостоятельно (для подключения к методу ShouldSerialize*); Protobuf-net сам не отслеживает изменения. Если в настоящее время у вас нет отслеживания изменений, вы можете использовать что-то из этого ответа: Сравнение 2 объектов и получение списка полей с разными значениями

...