.Net中LongPolling的可扩展性:大结局

时间:2011-12-21 15:58:57

标签: asp.net-mvc comet long-polling server-push

我研究了如何在asp.net / MVC上实现像聊天一样的彗星。 我发现它可以通过Long Polling来完成..

关于长轮询,因为它使线程保持打开,因此将使许多并发连接使其性能差(或者为零),因为IIS不适用于许多并发连接

现在的商业工具:Pokein,SignalR,SocketIO,Now.Js(跳过付费工具,免费很漂亮:)) 据我所知,所有这些使用长轮询,那么它们实际上是什么来提高IIS的性能(所有这些都可以用于asp.net)..

我还发现Facebook使用Erlang(Dunno如何使用它)来实现它&当然价值1亿美元的硬件(平衡7000万用户)。和FB使用长轮询而不是一些彗星服务器(就我的研究而言)。

我想在asp.net MVC 3上实现可伸缩的长轮询 我发现的两个决赛是Herehere

我只想知道哪个更好,为什么.. 以及哪种工具在给定的工具中最佳

2 个答案:

答案 0 :(得分:2)

我认为SignalR是更好的选择,如果不是因为如果你使用SignalR.WebSockets,它会自动升级到网络套接字的连接,如果用户的浏览器支持它。这样,随着时间的推移,当用户开始升级浏览器并远离长轮询方案时,聊天应用程序的可扩展性实际上会变得更好。

此外,有一个很棒的代码示例叫做JabbR,由创建SignalR的人创建。 (他们也恰好是ASP .NET团队的开发人员)

http://jabbr.net/ - SignalR的一个例子 https://github.com/davidfowl/JabbR - JabbR来源。

答案 1 :(得分:1)

虽然你标记了答案,但我很想回答这个问题,因为我已经经历了很长一段时间。

我使用过两个大型COMET播放器的解决方案。一个是websync,另一个是PokeIn。网络同步很好,但价格昂贵。在成功使用PokeIn方面,我遇到了很多问题。我实际上并没有将它用于聊天服务器,而是用于推送实时更新,其中一些外部程序将更新发送/推送到订阅的客户端。

我建议你尝试使用基于IHttpAsyncHandler的逻辑。这又是一种长轮询技术,但客户端在发送请求后返回,服务器可以异步发送响应。

对不起自我宣传。我在codeplex中名为flycomet的项目中有一个示例实现。这只是一个处理程序,它接收请求并根据请求的类型响应回复(如果有的话)。

目前,实施不是作为聊天服务器提供,而是作为Windows控制台推送客户端应用程序提供,订阅者可以来自asp .net或MVC或silverlight。优点是您可以调整代码以便自己扩展。

如果您想将其修改为聊天应用程序,通过jQuery推送数据非常容易。