关于iis:Comet实现ASP.NET吗?

关于iis:Comet实现ASP.NET吗?

Comet implementation for ASP.NET?

我一直在研究在浏览器中实现类似gmail的消息传递的方法,并提出了Comet概念。 但是,我找不到能够在IIS中完成此操作的良好.NET实现(我们的应用程序是用ASP.NET 2.0编写的)。

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

所以我的问题是-您知道Comet的ASP.NET实现以不同的方式工作吗? IIS是否有可能?


由于Comet的持久连接性,Comet很难通过IIS进行扩展,但是现在有一个团队正在研究Comet方案。还可以看看Aaron Lerch的博客,因为我相信他已经在ASP.NET中完成了一些Comet早期工作。


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 Runtime和.NET Compact的客户端支持,而对.NET / Mono和PHP的服务器端支持。

开箱即用的SQL Server或Azure缓存都支持群集,但是自定义提供程序几乎可以写任何东西(Redis,NCache)。

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


我最近根据Clay Lenhart的精彩文章写了一个使用MVC 3异步控制器的长轮询聊天服务器的简单示例。

您可以在我根据BitBucket项目的源代码设置的AppHarbor部署中使用该示例。

另外,可以从我的博客文章中获得更多信息来解释该项目。


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


您可能还会看到Kaazing企业网关,它已经发布了webSocket [HTML5]网关的生产版本,该网关完全取代了彗星方式,并实现了浏览器和应用程序服务器之间的全双工连接。

您可能还会看到Light Streamer演示


WS-I组发布了一种称为"可靠的安全配置文件"的文件,该文件具有Glass Fish和.NET的实现,显然可以很好地实现互操作。

运气好的话,还有Java脚本实现。

还有一个使用HTTP Duplex的Silverlight实现。您可以将JavaScript连接到Silverlight对象,以在发生推送时获取回调。

也有商业付费版本。


我很久以前曾经使用过一个聊天站点,该站点利用了自定义的http流服务器。实际上,出于好奇,我曾经一次复制过该软件,我认为这样做很容易。我绝不会尝试在IIS中实现类似类型的"无限请求",尤其是在ASP.NET中,因为这些请求会无限期地占用线程池线程(如果使用异步处理程序,则是IO线程),这意味着您只能在您的线程池配置允许的情况下,每个服务器要处理的内容太多。

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

我知道这并不能真正回答您的问题,但我认为所提出的建议可能是有意义的。


我认为,除非您准备水平扩展Web场(通过向组合中添加更多Web服务器),否则Comet方法并不是真正可扩展的。它的工作方式是使每个用户会话都保持TCP连接打开,以便服务器可以不时将内容推送到该连接中,以立即将更改或活动通知用户。


推荐阅读