ASP.NET的Comet实现?

时间:2020-03-05 18:54:14  来源:igfitidea点击:

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

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

所以我的问题是,我们是否知道以不同的方式工作的Comet的ASP.NET实现?使用IIS甚至可能吗?

解决方案

回答

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

回答

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

回答

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

我们可能还会看到Light Streamer演示

回答

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)。

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

回答

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

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

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

回答

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