ASP.NET的Comet实现?[关闭]


103

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

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

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


12
我想最初受MS支持的实现是SignalR:hanselman.com/blog/…– 2011
user423430

现在,Azure支持Node.JS,不久将支持2003年的IIS。这意味着我们将能够在IIS(windowsazure.com/en-us/develop/nodejs)中运行彗星服务器
goodguys_activate 2012年

Answers:


44

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


9
这实际上已经实现;请按照以下Anton的回复查看WebSync。(frozenmountain.com/websync
jvenema

3
有人叫反向ajax吗?检查一下:pokein.codeplex.com
Zuuum 2011年

4
MVC异步控制器可以通过将等待的工作卸载到非IIS工作线程来帮助解决IIS问题,请参阅Clay Lenhart的精彩文章。另请参阅BitBucket上的聊天服务器示例项目
雅各布

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

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

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


17
这里应该有免责声明,因为它是您的产品...
Sam Saffron

9
当然,它是由我工作的公司生产的:)绝对不会试图隐藏任何东西。
安东

1
@Anton-不隐藏内容与公开内容不同。
RedFilter

1
@Anton您能否详细说明它如何支持每个服务器节点最多2万个并发客户端连接?这些数字看起来很好..“太大”。
Pacerier

1
我认为,从25,000英尺的角度来看,从概念上询问websync的工作原理是不明智的。
nocarrier

15

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

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

另外,可从我的博客文章中获得有关该项目的更多信息。


我喜欢AppHarbor部署上的示例
guaike,2012年

'博客文章,解释项目' - > web.archive.org/web/20130328042214/http://...
jaybro

谢谢!很高兴您喜欢这篇文章。
克莱·伦哈特

4

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



1

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

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

我知道这并不能真正回答您的问题,但是我认为输入内容可能是相关的。


1

WS-I组发布了名为“ Reliable Secure Profile”的文件,该文件具有Glass Fish和.NET实现。,显然可以很好地互操作

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

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

也有商业付费版本


4
在短时间内大量发布与多个问题完全相同的答案可能会绊倒一些旗帜……
Marc Gravell

2
psst

0

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


6
一切都只能垂直扩展到一个点,然后必须进行水平缩放。
安东
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.