C# - 关于服务器向客户端发送推送通知的设计问题 - 如何实现?
Posted
技术标签:
【中文标题】C# - 关于服务器向客户端发送推送通知的设计问题 - 如何实现?【英文标题】:C# - Design questions about a server firing push notifications to clients - how to implement? 【发布时间】:2011-07-15 10:22:47 【问题描述】:这就是场景。
我的应用程序上有多个客户端和一台服务器。 服务器本身与客户端断开连接,它只是通过 Windows 服务(Web 服务和 FTP)从 Web 下载一些数据,处理数据并更新所有客户端都连接到的数据库并从中提取数据。
我希望能够在某些下载发生时以一定程度的粒度主动通知客户(即在发生价格/交易更新时仅通知交易者,或者在有需要时仅通知工程师)没有轮询。
服务器应该向所有连接的客户端发出通知,而不是让它们不断“询问”是否有更新,因为在这种情况下,我必须维护所有客户端的状态。
我想到了 XMPP 和 Matrix。
为此,每个客户端都必须打开与 Windows 服务的持久连接,但我缺乏有关如何实现此功能的确切细节。也许有节点! 据我所知,XMPP 非常适合我想要完成的任务,如果我需要,它可以让我扩展至更多功能。
我不知道是实现自己的服务器还是使用现有的服务器之一(我听说 jabberd2 有一个出色的 windows 服务器)。
但最重要的是:我需要关于 A)在 Windows 上运行的 XMPP 服务器和 B)C# 库的建议。除了 Matrix 我发现很少,最重要的是我需要通知支持(pubsub)。
【问题讨论】:
你看过MQ吗?示例:NServiceBus、RabbitMQ、ActiveMQ。所有这些都支持 pubsub 并拥有 .net 客户端 您有什么理由不能/不想使用 IIS 服务器吗?在 .NET 中,您可以使用远程处理并在客户端上创建侦听器,以便在服务器上发生任何更改时收到通知...... @pebrian 我不知道这些存在,我会看看。 @Eduard 我尽量坚持开源 - 但谢谢,我会考虑到这一点。 【参考方案1】:为简单起见,我会考虑使用实现long polling 技术的WCF 服务。 This article 提供了一些有关有效扩展 WCF 服务的详细信息。
对于数据库中有新数据的通知,如果您使用的是 SQL Server,请尝试SqlDependency。它允许您设置一个事件,只要给定查询的结果发生更改,该事件就会在您的代码中触发。我已经有效地将它用于这类事情。
【讨论】:
以上是关于C# - 关于服务器向客户端发送推送通知的设计问题 - 如何实现?的主要内容,如果未能解决你的问题,请参考以下文章