asp.net-mvc - 使用 MVC Futures 的异步 Controller 在 .NET 3.5 SP1 中的 ASP.NET MVC 1 中长轮询的服务器和连接限制

标签 asp.net-mvc performance asynchronous comet long-polling

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

已阅读 Thomas Marquardt's article on ASP.NET Thread Usage on IIS 7.0 and 6.0 ,这里和其他地方的许多关于长轮询的问题都引用了它,似乎 默认 运行 ASP.NET MVC 1 应用程序(在 .NET 3.5 SP1 中)的 Windows Server 2008 R2(带有 IIS 7.5)的设置,其中使用 MVC Futures 的异步 Controller 实现长轮询功能将 不是 能够为数以千计的用户提供服务。

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

由于我使用的是异步 Controller ,因此我假设我不需要更改每个 CPU 的并发工作线程数,因为等待长轮询触发的线程将被解除。 我这里的理解正确吗? 或者这是否随着长轮询操作方法中“等待”的完成方式而有所不同? (我打算使用事件。)

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

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

提前致谢!

最佳答案

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

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

http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx

关于asp.net-mvc - 使用 MVC Futures 的异步 Controller 在 .NET 3.5 SP1 中的 ASP.NET MVC 1 中长轮询的服务器和连接限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897978/

相关文章:

asp.net-mvc - 操作方法参数不为空,尽管它应该是

multithreading - 多线程程序如何更节能?

performance - 带有大 UIImageView 的自定义 UITableViewCell 导致滚动延迟

node.js - 如何将 async/await 与 mongoose 一起使用

asp.net-mvc - 使用基类的参数解析构造函数参数

asp.net-mvc - 在 MVC 中呈现局部 View

MySql SELECT 查询大型数据库中的性能问题

php - 在 Swift2 中发送 php POST 请求需要很长时间

asynchronous - "Throttled"在 F# 中异步下载

asp.net-mvc - ASP.NET MVC : url routing vs querystring