微软为持久连接框架SignalR贡献基于Azure的向外扩展

openkk 12年前
     <p> 作者 <a href="/misc/goto?guid=4958331659993825656">Richard Seroter</a> 译者 <a href="/misc/goto?guid=4958331654885407681">曹如进</a></p>    <p> Windows Azure 团队架构设计师,Clements Vasters,在最近一篇博文中介绍了一个新的 <a href="/misc/goto?guid=4958331661562391833">GitHub 项目</a>——SignalR。该项目使用 Windows Azure 服务总线(Service Bus)在服务器和客户端之间进行双向分发信息,它的出现让异步 ASP.NET Web 事件引擎具有向外扩展以及高吞吐消息传送能力成为可能。</p>    <p> SignalR 类似与 JavaScript 实时框架,如 <a href="/misc/goto?guid=4958331662353341543" target="_blank">Socket.IO</a>。SignalR 能够完成客户端向服务器的异步通信,并同时支持服务器向浏览器客户端推送事件。虽然没有直接绑定在 ASP.NET 中,但是 SignalR 项目由微软 ASP.NET 团队打造,用作为 ASP.NET Web 应用程序提供持久连接机制。SignalR 的连接通过<a href="/misc/goto?guid=4958331663155050728">日益流行的 WebSockets</a> API 完成,而如果 <a href="/misc/goto?guid=4958331663955765921">WebSockets 无法使用</a>,它会透明地回落为<a href="/misc/goto?guid=4958331664755321764">长轮询技术</a>(long-polling technique)。如果开发人员想使用 Signal,需要在客户端层使用像 jQuery 的 JavaScript 框架,并在服务端层使用 .NET 代码编写应用和服务。SignalR 具有多种编程模型(<a href="/misc/goto?guid=4958331665547930495" target="_blank">PersistentConnections</a> 和 <a href="/misc/goto?guid=4958331666358940897" target="_blank">Hubs</a>),它为开发人员提供了连接、消息接收群以及事件处理器的不同层次的访问。</p>    <p> 虽然 SignalR 显示已经可在单台机器上扩展至上万个连接,但是开发人员还没有办法跨越多台 Web 服务器进行服务端组件<a href="/misc/goto?guid=4958331667155405930">部署</a>。这会带来单点故障,而且限制应用程序可支持的并发连接数。Vasters 说他使用 Azure 服务总线解决了这个问题:</p>    <blockquote>     <p>上周,我为 SignalR 建立了一个 Windows Azure 服务总线底板(backplane),它能够部署 SignalR 解决方案到多个结点上,并可以跨越这些结点进行消息分发,确保每一个发送端拥有合理的顺序,以及光标 cookie 中结点到结点的正确性和一致性。</p>     <p>只要你的后端主机能够访问服务主线命名空间,不管你托管的 SignalR 解决方案中在什么地方,你都可以你使用这个底板。如果你的解决方案是放在 Windows Azure 的数据中心,那显然是最好不过的;当然,放在其他的地方也行,只是会多几(毫秒)的延迟。</p>    </blockquote>    <p> 使用基于 Azure 的 SignalR 项目,用户可以选择跨越<a href="/misc/goto?guid=4958331667952885869">服务总线 Topics</a> 对消息进行分流,从而达到超过单个 Topic 能够支持的吞吐量。由于 Vasters 的这个项目利用到了<a href="/misc/goto?guid=4958331668745664068">已受支持的 SignlR 扩展点</a>,因此只需对服务器应用程序进行很小的改动即可。你可以通过<a href="/misc/goto?guid=4958331661562391833">访问它在 GitHub 中的站点</a>以下载或查看该项目的源代码。</p>    <p> <strong>查看英文原文:</strong><a href="/misc/goto?guid=4958331670286342438">http://www.infoq.com/news/2012/02/azure-signalr</a></p>