我一直在寻找在浏览器中实现类似 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 Enterprise Gateway,它已经发布了他们的 webSocket [HTML5] 网关的生产版本,它完全取代了 comet 方式并支持浏览器和应用程序服务器之间的全双工连接。
您还可以查看Light Streamer 演示
我很久以前曾经使用过一个聊天网站,它使用了一个定制的 http 流服务器。实际上,出于纯粹的好奇心,我曾一度复制了该软件,我认为这很容易做到。我永远不会尝试在 IIS 中实现类似类型的“无限请求”,尤其是在 ASP.NET 中,因为请求会无限期地占用线程池线程(或 IO 线程,如果使用异步处理程序),这意味着您只能在您的线程池配置允许的情况下为每台服务器处理这么多。
如果我对这种功能有强烈的合法需求,我会诚实地为它编写一个自定义的 http 服务器。
我知道这并不能真正回答您的问题,但我认为输入可能是相关的。
WS-I 小组发布了一个名为“Reliable Secure Profile”的东西,它有一个 Glass Fish 和.NET 实现,显然可以很好地互操作。
运气好的话,那里也有一个Javascript实现。
还有一个使用HTTP Duplex 的 Silverlight 实现。 您可以将 javascript 连接到 Silverlight对象以在推送发生时获取回调。
还有商业付费版本。
我认为 Comet 方法不是真正可扩展的,除非您准备水平扩展 Web 场(通过添加更多 Web 服务器来混合)。它的工作方式是让每个用户会话打开一个 TCP 连接,这样服务器就可以不时将内容推送到该连接中,以立即通知用户更改或活动。