0

我已经获得了提供位置信息的实时数据源的访问权限,并且我想围绕它建立一个网站,但我有点不确定使用什么架构来满足我的需求。

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

从前端连接的角度来看,Web 服务听起来好像可以工作,但这是否也会为每个用户创建多个到订阅源的连接?我还希望后端连接是持久的,这样即使网站不被访问也能检索和处理数据,我相信IIS会在它们空闲时回收web服务和网站?

我想保持设计相当灵活——将来我会添加一些移动客户端,所以 API 需要支持远程连接。

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

实现这一目标的最佳方式是什么,有哪些技术可以帮助实现这一目标?Comet 架构听起来很接近我的需要,但这需要构建一个可以同时处理多个基于 Web 的查询的后端,这似乎是一项艰巨的任务。

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

提前感谢所有建议!

4

2 回答 2

2

实时数据消费者

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

这个组件(A)将是一个独立的进程,可能是一个服务。

排队消费者

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

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

实时网络技术组件 (D)

如果您使用的是 .NET 堆栈,那么SignalR似乎获得了最大的吸引力。您还可以查看XSockets (我的实时网络技术指南中有更多选项。只需搜索“.NET”。

您将希望使用 signalR 来管理订阅,然后将消息发布到注册客户端(PubSub -这个 SO 帖子似乎相关,也许您可​​以要求更多信息)。

您还可以考虑将 PubSub 组件卸载到托管服务,例如我工作的Pusher。这将处理管理订阅,组件 C 只需将数据发布到适当的通道。实时网络技术指南中还列出了其他选项。

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

概括

成分:

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

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

于 2012-07-05T15:05:15.663 回答
1

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

如果您需要客户端轮询更新,那么您将需要一个查询系统来存储下一个请求的信息。这可以是一个简单的数组,也可以是一个更复杂的查询系统,具体取决于您的要求和用户数量。

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

于 2012-07-05T15:26:03.463 回答