如何使用COMET并行化IIS请求?

时间:2009-12-07 23:59:40

标签: asp.net-mvc iis comet parallel-processing

我有一个ASP.NET MVC 2 Beta应用程序,我需要阻止特定操作的传入请求,直到我有一些数据可用于返回,或者在没有新数据可用的情况下在30秒后释放请求。

为了实现这一目标,我正在使用AutoResetEvent.WaitOne(30000);

最大的问题是,当线程在WaitOne指令被阻止时,IIS似乎不接受任何新请求。新请求会挂起,直到线程释放。

我需要能够在保持WaitOne行为的同时并行化请求。

4 个答案:

答案 0 :(得分:2)

异步处理程序是您正在寻找的。如果您正在构建一个彗星解决方案,您可能想要查看我们的彗星服务器here的.NET实现,它会为您节省一些时间。如果您想要自己动手,那么您肯定需要使用异步处理程序来避免在超过60或70个用户时达到较高的并发限制,但即使使用异步处理程序,您仍然需要做一些花哨的步法。基本上,你仍然会在线程池中达到一些上限,除非你将请求移交给一个有限的线程池,它基本上可以为你管理所有传入的请求。

祝你好运!

答案 1 :(得分:1)

您根本不应该阻止传入的请求。如果您需要的数据尚未就绪,则返回空响应,或者返回错误代码。

答案 2 :(得分:0)

对于Web应用程序,更可取(不是硬规则)返回消息以告知用户稍后因为您想要调用它而无法再次重试。

通过'等待'来阻止/阻止请求并没有多大帮助,因为等待是不确定的,除非你有一个机制来做到这一点。

我不知道您网站的性质/背景/流量模式。 30秒可以是适合您的数字。也许我的上述观点并不真实,仅仅是我的2美分。

答案 3 :(得分:0)

实际上,事实证明这种行为只发生在ASP.NET MVC 2 Beta上。我在MVC 2预览版2中运行良好,并回滚到此版本进行重新测试并确认该应用程序在该版本中运行良好。

现在,问题是:为什么我在这两个MVC发行版本之间看到了这种不同的行为,以及在这种情况下我应该期待的正确行为是什么?