实时更新App的服务器架构

时间:2014-07-24 20:34:02

标签: wcf architecture websocket real-time updates

我正在建立一个需要持续实时更新的股票代码。客户端上的JavaScript与.NET WCF 4.5交谈,它引入了对WebSockets的支持。

用户的Feed非常不同。例如,许多用户都关注流行的大型股,如FB,GOOG和MSFT,但每个用户都会关注许多其他可能对他而言独特的“利基”股票。

我们都知道有几种方法可以实时刷新浏览器。

  1. 轮询。优点:易于实施。缺点:不扩展,原始,浪费带宽和周期。

  2. 长轮询。优点:高效,可扩展。缺点:过时了吗?

  3. 的WebSockets。优点。高效,可扩展。缺点:没有我能想到的,因为大多数现代浏览器都支持caniuse.com

  4. 有人会选择3以外的任何东西。?

    假设我使用3.,服务器的开放连接如何跟踪?例如,如果我们设计这样我们保留一个FB“追随者”池(即客户端连接对FB的价格变化感兴趣),以便我们知道在价格变化发生时更新谁,这个池如何维护?通过在内存中不断运行的服务?此外,如果FB关注者关闭了她的浏览器,该服务是否需要捕获此事件并更新FB的关注池?这就是我快速模糊的地方。

1 个答案:

答案 0 :(得分:1)

看看这篇关于长轮询的难点的帖子:Hard downsides of long polling?

  

如何跟踪服务器的开放连接?

可能在WCF WebSockets中有一种方法可以连接和断开连接事件。如果没有,你肯定应该关注其他框架。我前段时间看了一下WCF的websockets,它看起来不像我想要使用的东西,抛开你需要Windows 8或Windows 2012才能使用它。

你应该考虑像just和endpoint这样的websockets。您应该使用事件驱动的体系结构方法开发您的股票代码软件,然后提供接收/交付事件的端点,这将是应用程序的完全不同的部分。对于活动管理,我建议您查看MassTransit project

如果您已清楚,那么您可以定义用户如何连接到您的服务并与之交互。在Web事件驱动的体系结构中,websockets非常有意义,因为它是一个全双工,持久连接以及广泛支持的Web标准。

为了向.NET提供websockets,WCF不是唯一的选择,也可能不是最好的选择。为了向您的架构添加websocket端点,我建议您查看WebSocketListener,这是一个非常小的组件,用于提供websocket功能(免责声明:我开发它),或XSocket.NET如果你想要一个能做很多事情的更复杂的解决方案。看一下使用XSocket.NET完成的示例:https://github.com/codeplanner/Simple.StockTicker