Уведомление избирательного изменения для нескольких клиентов (C #)

StackOverflow https://stackoverflow.com/questions/4150779

Вопрос

Мне нужно реализовать механизм уведомления для системы, которая имеет один менеджер и несколько потребителей / клиентов. Менеджер должен опросить базу данных и огонь событие всякий раз, когда есть изменения в данных. Теперь было бы легко, если бы все клиенты будут заинтересованы в одних и тех же данных, и было бы достаточно реализовать одно событие и подписаться со всеми клиентами на это событие. Однако клиенты должны получать только события для данных, которые они несут ответственность.

Например, есть несколько клиентов, которые добавляют новых клиентов. Это происходит через менеджер в потоке. Теперь эти клиенты создали клиентов, нужно знать о любых изменениях, которые происходят только для этих клиентов. Менеджер обозначает таблицу клиентов каждый n секунд и получает список всех клиентов, которые изменились. Затем менеджер понадобится «маршрут» (для отсутствия лучшего слова) уведомления для заинтересованных клиентов.

Будет ли это будет реализовано с каким-то обратным вызовом, что каждый клиент должен будет поставлять диспетчеру? Это звучит как то, что мне нужно, но я не знаю, как я могу пройти параметры к этому обратному вызову (здесь, это клиенты, которые заинтересованы в том, чтобы не беспокоить, когда у вас есть обновления для любого другого клиента)

Я использую C #, .NET 2.0. Спасибо!

Это было полезно?

Решение

Это хорошее описание Узор наблюдателя. Отказ Как правило, клиент регистрирует интерес с менеджером для набора данных, которые имеют отношение к нему, предоставляют средства уведомления (это будет ваш обратный вызов). Клиент может также отменить регистрацию, если он больше не заинтересован в ранее полезных данных. Тогда работа менеджера состоит в том, чтобы распространять изменения во всем заинтересованным Observers (то есть клиенты).

В C # необходимая инфраструктура доступна в качестве первоклассных языковых особенностей - события и делегаты. Есть хороший (если простой) пример код здесь.

В .NET 4 Это удобство сделает шаг дальше с ObservableCollection<T> Доступно для автоматизации процесса уведомлений.

Кстати - я бы избежать опроса базы данных, если это возможно. Нет, вы можете получить уведомление о необходимых изменениях в вашей БД? В сервере C # / SQL вы можете использовать Sqldependents..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top