ASP.NET的Comet实现?

时间:2008-09-15 18:56:59

标签: asp.net iis comet

我一直在寻找在浏览器中实现类似gmail的消息传递的方法,并且达到了Comet的概念。但是,我还没有找到一个很好的.NET实现,允许我在IIS中执行此操作(我们的应用程序是用ASP.NET 2.0编写的)。

我发现(或者可以想到的)解决方案需要为每个用户留下一个正在运行的线程 - 这样一旦他收到消息就可以向他返回响应。当然,这根本不会扩展。

所以我的问题是 - 你知道Comet的ASP.NET实现以不同的方式工作吗?这甚至可以用于IIS吗?

8 个答案:

答案 0 :(得分:44)

由于彗星的持续连接,Comet很难通过IIS进行扩展,但现在有一个团队正在研究Comet场景。另请查看Aaron Lerch's blog因为我相信他已经在ASP.NET中完成了一些早期的Comet工作。

答案 1 :(得分:33)

WebSync是一个符合标准的可扩展Comet服务器,可直接集成到IIS / .NET管道中。它也可以作为托管服务按需提供。

它正式支持每个服务器节点最多20,000个并发客户端连接,但个别测试已经高达50,000。消息吞吐量在1,000-5,000个并发客户端标记附近是最佳的,消息从单个节点每秒高达300,000。

它包括对JavaScript,.NET / Mono,iOS,Mac OS X,Java,Silverlight,Windows Phone,Windows运行时和.NET Compact的客户端支持,以及对.NET / Mono和PHP的服务器端支持

使用SQL Server或开箱即用的Azure缓存支持群集,但可以为几乎所有内容编写自定义提供程序(Redis,NCache)。

免责声明:我为开发此产品的公司工作。

答案 2 :(得分:15)

我最近使用基于simple example of a Long Polling Chat Server的MVC 3异步控制器编写了great article by Clay Lenhart

您可以根据BitBucket项目的来源使用我设置的example on a AppHarbor deployment

此外,我的blog post explaining the project提供了更多信息。

答案 3 :(得分:4)

实际上,使用ASP.NET创建支持Ajax的网站有很多选择,但老实说, PokeIn 是创建彗星ajax支持的Web应用程序的最简单方法。它保存了我公司的一个项目。

答案 4 :(得分:3)

您还可以查看已发布其webSocket [HTML5]网关的Kaazing Enterprise Gateway,该网关完全取代了彗星方式,并实现了浏览器和浏览器之间的全双工连接。应用服务器。

您也可以查看Light Streamer Demos

答案 5 :(得分:1)

我很久以前曾经使用过聊天网站,它使用了自定义构建的http流媒体服务器。实际上,我出于纯粹的好奇心在某一点上复制了该软件,我认为这很容易实现。我永远不会尝试在IIS中实现类似类型的“无限请求”,尤其是在ASP.NET中,因为请求会无限期地占用线程池线程(或IO线程,如果使用异步处理程序),这意味着您只能每个服务器处理如此多的线程池配置允许。

如果我对此类功能有强烈的合法需求,我会诚实地为它编写一个自定义的http服务器。

我知道这并没有真正回答你的问题,但我认为输入可能是相关的。

答案 6 :(得分:1)

WS-I小组发布了名为"Reliable Secure Profile"的内容,其中有一条Glass Fish和.NET implementation显然inter-operate

运气好的话还有Javascript实施。

还有一个使用HTTP Duplex.的Silverlight实现。当发生推送时,你可以connect javascript to the Silverlight反对获取回调。

还有commercial paid versions

答案 7 :(得分:0)

我认为Comet方法不是真正可扩展的,除非您准备水平扩展Web场(通过添加更多Web服务器)。它的工作方式是每个用户会话都打开一个TCP连接,这样服务器就可以不时地将东西推送到该连接中,以便立即通知用户更改或活动。