实时数据馈送和网站的体系结构

时间:2012-07-05 10:09:36

标签: asp.net .net web-services comet

我可以访问提供位置信息的实时数据源,我想围绕此建立一个网站,但我不确定用什么架构来满足我的需求。

不幸的是,我有权访问的提要只允许每个IP地址进行一次连接,因此构建一个直接与该提要进行对话的网站 - 因为每个用户都会生成一个新的请求,这将被拒绝。还需要对数据执行一些预处理,所以我想我需要某种后端来检索数据,对其进行处理,然后将其提供给网站。

从前端连接的角度来看,Web服务听起来可能有用,但是这也会为每个用户创建多个Feed连接?我还希望后端连接是持久的,以便即使在没有访问该站点时也可以检索和处理数据,我相信IIS会在闲置时回收Web服务和网站吗?

我希望设计保持相当灵活 - 将来我会添加一些移动客户端,因此API需要支持远程连接。

简单的解决方案是将所有处理过的数据记录到数据库中,然后由网站提取,但这会丢失数据的实时方面。理想情况下,我希望每次数据更改或现在收到数据时都将数据推送到网站。

实现这一目标的最佳方法是什么,以及哪些技术可以提供帮助? Comet架构听起来接近我的需要,但这需要构建一个可以同时处理多个基于Web的查询的后端,这看起来非常重要。

理想情况下,我会寻找一个基于C#/ ASP.NET的Javascript客户端解决方案,虽然我想这个问题更多地基于架构和概念,而不是技术实现。

提前感谢所有建议!

2 个答案:

答案 0 :(得分:2)

实时数据使用者

最简单的解决方案似乎是有一个专门用于读取实时Feed的组件。然后,它可以将接收到的数据发布到队列(或多个队列),供架构中的其他组件使用。

此组件(A)将是一个独立的流程,也许是一项服务。

队列消费者

队列可以通过以下方式读取:

  1. 一个(B)组件,专门用于保存数据以供将来检索或查询。如果数据量很大,您可以添加从持久性队列中读取的更多组件。
  2. 组件(C),可直接向任何已连接的订阅者发布数据。它也可以进行一些处理,但如果您正在进行大量处理,则可能需要多个组件来执行此任务。
  3. 实时Web技术组件(D)

    如果您使用的是.NET堆栈,那么SignalR似乎正在获得最大的吸引力。您还可以查看XSocketsrealtime web tech guide中有更多选项。只需搜索“.NET”。

    您需要使用signalR来管理订阅,然后将消息发布到注册客户端(PubSub - this SO post seems relevant,也许您可​​以要求更多信息)。

    您还可以查看将PubSub组件卸载到托管服务,例如我为{/ em>工作的Pusher。这将处理订阅和组件C只需要将数据发布到适当的通道。 realtime web tech guide中列出了其他所有选项。

    所有这些组件都附带一个JavaScript库。

    摘要

    组件:

    • A - .NET服务 - 将信息发布到队列
    • 队列 - MSMQ,NServiceBus等
    • B - 也可以是一个读取队列的简单.NET服务。
    • C - 这实际上取决于D,因为一些实时网络技术将能够直接集成。但它也可能只是一个读取队列的简单.NET服务。
    • D - 实时网络技术,提供向订阅者(PubSub)路由信息的简单方法。

    如果您提供更多信息,我会更新我的答案。

答案 1 :(得分:1)

一个很好的解决方案就是http://rubyeventmachine.com/http://nodejs.org/。它不是asp.net,但它可以轻松解决向其他用户分发实时数据的问题。由于每个都内置了用户连接,订阅和频道广播,这将使其余的编码变得非常简单。您的客户只需通过标准tcp连接即可。

如果您需要客户端轮询更新,那么您需要一个que系统来存储下一个请求的信息。根据您的要求和用户数量,这可能是一个简单的数组,也可能是一个更复杂的que系统。

.net可能有解决方案我不知道做同样的事情,但那些是我所知道的。