it-swarm.cn

ASP.NET的Comet实现?

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

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

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

102
Doron Yaacoby

由于彗星的持续连接,Comet很难用IIS进行扩展,但现在有一个团队正在研究Comet场景。另请参阅 Aaron Lerch的博客 我相信他已经完成了一些早期的Comet Comet工作。

44
Scott Hanselman

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

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

33
Anton

我最近写了一个 简单的长轮询聊天服务器的例子 使用MVC 3异步控制器基于 Clay Lenhart的伟大文章

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

此外,我 博客文章解释项目的更多信息

15
Jacob

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

4
BigbangO

您还可以查看 Kaa​​zing Enterprise Gateway 已经制作了他们的webSocket [HTML5]网关的生产版本,该网关完全取代了彗星方式,并实现了浏览器和应用服务器之间的全双工连接。

你也可以看看 Light Streamer演示

3
Vikram

WS-I小组发布了一些名为 “可靠的安全配置文件” 有一个Glass Fish和 .NET实现 显然 互操作 好。

运气好的话还有一个 Javascript 实现。

还有一个使用 HTTP Duplex的Silverlight实现。 你可以 将javascript连接到Silverlight 对象以在发生Push时获得回调。

还有 商业付费版本

1
Christopher

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

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

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

1
Chris

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

0
cruizer