Asp.net mvc 在.NET 3.5 SP1的ASP.NET MVC 1中使用来自MVC的异步控制器进行长轮询的服务器和连接限制

Asp.net mvc 在.NET 3.5 SP1的ASP.NET MVC 1中使用来自MVC的异步控制器进行长轮询的服务器和连接限制,asp.net-mvc,performance,asynchronous,comet,long-polling,Asp.net Mvc,Performance,Asynchronous,Comet,Long Polling,我正在尝试将一个长轮询(“反向ajax”、“http推送”)功能重新安装到运行在.NET 3.5 SP1上的现有ASP.NET MVC 1 web应用程序中。由于此应用程序有数千个并发用户,并且所有这些用户都将使用长轮询功能,我担心我将遇到难以预见和测试的服务器和连接限制。 在阅读了许多关于长轮询的问题后,这里和其他地方都提到了Windows Server 2008 R2(带IIS 7.5)运行ASP.NET MVC 1应用程序(在.NET 3.5 SP1中)的默认设置如果使用来自MVC Fut

我正在尝试将一个长轮询(“反向ajax”、“http推送”)功能重新安装到运行在.NET 3.5 SP1上的现有ASP.NET MVC 1 web应用程序中。由于此应用程序有数千个并发用户,并且所有这些用户都将使用长轮询功能,我担心我将遇到难以预见和测试的服务器和连接限制。

在阅读了许多关于长轮询的问题后,这里和其他地方都提到了Windows Server 2008 R2(带IIS 7.5)运行ASP.NET MVC 1应用程序(在.NET 3.5 SP1中)的默认设置如果使用来自MVC Futures的异步控制器实现长轮询功能,则将无法为成千上万的用户提供服务

第一个罪魁祸首似乎是
maxConcurrentRequestsPerCPU
,根据Marquardt的说法,在.NET 3.5 SP1中,它被设置为12
。这意味着数千个并行长轮询需要数百个CPU,对吗?由于是否使用异步控制器,长轮询仍然是HTTP请求。我需要增加这个我的理解正确吗?

因为我使用的是异步控制器,所以我假设不需要改变每个CPU的并发工作线程数,因为等待长轮询触发的线程将被解缠我的理解正确吗?或者这是否与长轮询操作方法中的“等待”具体实现方式不同?(我计划使用事件。)

除此之外,我还会遇到其他限制吗?我不想开始随机增加
machine.config
aspnet.config
(甚至
web.config
)中的值,如果可能的话,我想保留
processModel
autoConfig

(我已经阅读了这里的所有问题,但没有一个专门深入研究这方面的细节,大概是因为它随CPU数量、CLR版本等而变化。)


提前谢谢

我认为您误解了异步控制器的意义。异步控制器用于长时间运行的web调用(注意:长时间轮询调用)。这意味着,如果一个操作需要时间来处理/返回,它将被异步处理,并立即将控制权返回给客户端

如果要实现长轮询,请使用SignalR


IIS的构建没有考虑到长时间运行的并发请求,只是无法扩展。您可能想看看Frozed Mountain的组件,在,它是一个具有回退支持的WebSocket服务器,或者将您的实时功能外包给一个@leggetter,IIS不能扩展?我认为这里缺少引用。:)@bzlm我不是说IIS根本无法扩展。我是说长时间运行的并发请求不能很好地扩展。IIS的构建并没有考虑到这一点。其他服务器技术已经从头开始构建,以满足这一需求,并提供更好的解决方案。作为一个标准的web服务器,IIS是不错的,但是如果有更好的解决方案,您通常不会将其用作静态文件服务器。因此,当有更好的解决方案可用时,我不会将其用作实时服务器。Hanselman刚刚在博客中提到了这一点:SignalR使用长轮询(如此相同的差异)和动态运行时,这意味着ASP.NET3.5应用程序已经过时。