我正在构建一个需要持续实时更新的股票报价器。客户端JavaScript与。net WCF 4.5对话,后者引入了对WebSockets的支持。
用户的提要差异很大。例如,许多用户关注facebook、谷歌和微软等热门大盘股,但每个用户都关注许多其他可能对他来说独一无二的"利基"股票。
我们都知道有几个选项可以实时刷新浏览器。
-
轮询。优点:易于实现。缺点:不可伸缩,原始,浪费带宽和周期。
-
长轮询。优点:高效、可扩展。缺点:过时的?
-
WebSockets。优点。高效、可伸缩的。缺点:我认为没有,因为根据caniuse.com,大多数现代浏览器都支持。
除了3,还有人会选别的吗?
假设我选3。服务器打开的连接是如何被跟踪的?例如,如果我们设计这样一个FB"追随者"池(即对FB价格变化感兴趣的客户端连接),以便我们知道当价格发生变化时应该更新谁,那么这个池是如何维护的?通过在内存中不断运行的服务?此外,如果FB关注者关闭了她的浏览器,该服务是否需要捕获此事件并更新FB的关注者池?
看看这篇关于长轮询的缺点的文章:长轮询的缺点?
服务器打开的连接是如何被跟踪的?
可能有一种方法在WCF WebSockets有连接和断开事件。如果没有,您一定要关注其他框架。我看了看WCF websockets前一段时间,它看起来不像我想使用的东西,抛开你需要Windows 8或Windows 2012来使用它。
你应该考虑像just和endpoint这样的websockets。你应该用事件驱动的架构方法开发你的股票报价软件,然后提供接收/发送事件的端点,这将是应用程序的一个完全不同的部分。对于事件管理,我建议你看看MassTransit项目。
当你清楚了这一点,你就可以定义用户如何连接到你的服务并与之交互。在web事件驱动的架构中,websockets非常有意义,因为它是一个全双工、持久的连接,也是一个被广泛支持的web标准。
为了向。net提供websockets, WCF不是唯一的选择,也可能不是最好的。为了将websocket端点添加到您的体系结构中,我建议您看一下WebSocketListener,这是一个非常小的组件,用于提供websocket功能(免责声明:我开发了它),或者XSocket。如果你想要一个更复杂的解决方案,可以做很多事情。看看这个用XSocket完成的例子。. NET: https://github.com/codeplanner/Simple.StockTicker