【问题标题】:Sharing information between applications在应用程序之间共享信息
【发布时间】:2010-05-05 09:27:52
【问题描述】:

我的问题很容易暴露:

我有一些应用程序在此期间共享数据。我需要一种方法来支持数据共享(跨多台计算机),当一个应用程序更改数据时,应该通知其他应用程序。

我的问题是什么技术对我有用。我现在意识到的解决方案是拥有一个共享数据的数据库和一个外部发布订阅系统(如http://pubsub.codeplex.com/)以在数据更改时通知所有应用程序。但我相信可能存在一些有用的解决方案。

你知道吗? 谢谢。

【问题讨论】:

    标签: .net data-sharing


    【解决方案1】:

    嗯,在提交这样的架构时要小心,它们在实践中永远不会很好地工作。第一个问题是您将创建的大量网络流量永远无法很好地扩展。更严重的是,你会遇到巨大的并发问题。根据定义,“数据更改”通知将延迟发送,并且不能保证它们会被订购。只要通知之间有足够长的时间延迟,一切都会运行良好,让子系统有机会同步查看数据。

    但是当负载增加并且通知开始被缓冲时,纸牌屋就会严重崩溃。子系统将开始对数据的旧视图做出决策,并与其他子系统持有的视图不同步。您也无能为力,您无法通过网络“锁定”。而且非常难以调试,同步不匹配完全是随机的和虚假的。

    追求中心化的服务器方式,并发处理起来容易很多。

    【讨论】:

    • 感谢您的回答。您指出了一些重要的问题,例如同步和网络流量。您建议使用集中式服务器。我认为您建议我将“共享数据”保留在服务器中,并且应用程序会在需要时获取该数据。这解决了同步问题,但会产生性能问题。我的应用程序必须快速运行。我只是不能每次都将数据发送到服务器。我必须在 RAM 中保留一份“共享数据”的副本。这就是为什么我更喜欢通知系统方法(即使这意味着使用过时的数据)
    【解决方案2】:

    如果您使用的是 Java,那么您会想到 JMX Sun's JMX tutorial。有很多支持并且易于使用。

    【讨论】:

    • 对不起。我错过了这一点。我在 .NET 中工作,谢谢。
    【解决方案3】:

    您可以使用Windows Communication Foundation (WCF) 在客户端和服务器之间进行通信。通信可以有两种方式,因此客户端可以通知服务器有关更改,服务器将向所有需要通知的相关客户端推送消息。双向通信在 WCF 中称为Duplex Contract。这样一来,如果您真的不需要数据库,就不必使用数据库。

    【讨论】:

      【解决方案4】:

      我可以使用 Sql Server 来存储我的数据,并使用 Sql Server 通知服务 (http://msdn.microsoft.com/en-gb/library/ms172483(SQL.90).aspx) 在数据更改时获取通知。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        相关资源
        最近更新 更多