代码之家  ›  专栏  ›  技术社区  ›  kateroh

多个客户端的选择性更改通知(C)

  •  0
  • kateroh  · 技术社区  · 14 年前

    我需要为一个拥有一个管理器和多个消费者/客户机的系统实现一个通知机制。管理器应轮询数据库,并在数据发生更改时触发事件。现在,如果所有客户机都对相同的数据感兴趣,那么这就很容易了,而且只需实现一个事件并订阅该事件的所有客户机就足够了。但是,客户机应该只接收他们负责的数据的事件。

    例如,有多个客户机添加新客户。这是通过管理器以线程安全的方式发生的。现在,创建客户的这些客户机需要知道仅发生在这些客户身上的任何更改。经理每隔n秒对客户表进行一次轮询,并获取所有已更改的客户的列表。然后,经理需要将通知“路由”(因为缺少更好的词)到感兴趣的客户机。

    这是否必须通过某种回调实现,每个客户端都必须向管理器提供回调?这听起来像是我需要的,但我不知道如何将参数传递给这个回调(这里,这些是我感兴趣的客户,当您为任何其他客户更新时,不要打扰我)

    我使用C,.NET 2.0。谢谢!

    1 回复  |  直到 14 年前
        1
  •  2
  •   Steve Townsend    14 年前

    这是一个很好的描述 Observer pattern . 通常,客户机向管理器注册与之相关的一组数据的兴趣,提供一种通知方式(这将是您的回调)。如果客户机不再对以前有用的数据感兴趣,也可以取消注册。那么管理者的工作就是将更改传播给所有感兴趣的人 Observers (即客户)。

    在C中,所需的基础结构作为一流的语言功能(事件和委托)提供。有好的(如果简单的话)示例代码 here .

    在.NET 4中,这种便利性在 ObservableCollection<T> 可用于自动执行通知过程。

    顺便说一下,如果可能的话,我会避免轮询数据库。您是否无法获得有关数据库中必要更改的通知?在C/SQL Server中,您可以使用 SqlDependency .

    推荐文章