【问题标题】:Scalability of LongPolling in .Net :Grand Finale.Net 中 LongPolling 的可扩展性:Grand Finale
【发布时间】:2012-01-25 10:23:35
【问题描述】:

我研究了如何在 asp.net / MVC 上实现类似彗星的聊天。 我发现它可以通过长轮询来完成..

关于长轮询,因为它使线程保持打开状态,所以会产生许多并发连接,从而使其性能变差(或为零),因为 IIS 不适用于许多并发连接

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

我还发现 Facebook 使用 Erlang(不知道如何使用它)来实现它,当然还有价值 1 亿美元的硬件(平衡 7000 万用户)。并且 FB 使用长轮询而不是某些彗星服务器(据我的研究)。

我想在 asp.net MVC 3 上实现可扩展的长轮询 我找到的两个决赛是Here 和here

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

【问题讨论】:

  • 我意识到这并不能真正回答你的问题;但以防万一它有帮助。如果您还没有看过它,可以添加到选择组合中的东西可能是 iisnode,让您能够在 iis github.com/tjanczuk/iisnode 中托管 nodejs 应用程序
  • 其实我也有同样的问题。只要轮询将为每个客户端保持打开的连接。我们打开的连接越多,IIS 就越慢。这是长轮询的一个已知缺点。我们知道一些现有的库 Pokein、SignalR、SocketIO 使用长轮询并且具有更好的性能。任何人都可以分享他们如何提高 IIS 性能。

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


【解决方案1】:

虽然您标记了答案,但我很想给出这个答案,因为我已经经历了很长时间。

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

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

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

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

如果你想把它改成聊天应用,通过jQuery推送数据是很容易的。

【讨论】:

  • 谢谢你,现在这是我第一次进行长时间的轮询聊天,所以我很困惑......你是否建议我不使用任何 3rd 方工具 watsoever
  • 顺便说一句,现在签出flycomet!
【解决方案2】:

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

此外,还有一个很棒的代码示例 JabbR,它是由创建 SignalR 的人创建的。 (同时也是 ASP .NET 团队的开发人员)

http://jabbr.net/ - SignalR 的示例。
https://github.com/davidfowl/JabbR - JabbR 源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2010-12-09
    • 2011-02-24
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多