【发布时间】:2014-09-25 07:33:45
【问题描述】:
我有一个 ASP.Net 页面,它通过从 JavaScript 调用 Web 服务方法每 5 秒轮询一个名为“Progress”的会话变量,如下面的代码所示。此轮询在单击某个按钮后开始,该按钮在客户端的单击事件是“ButtonClick”,即使在此处显示的 JavaScript 代码中也是如此。
我的问题是:由于 ASP.Net 的线程池大小有限,当许多用户使用此 ASP.Net 页面时,如此频繁的轮询会导致较低的吞吐量和请求超时吗?
用于轮询的 Web 服务方法
[WebMethod(EnableSession = true)]
public string GetProgress()
{
System.Web.HttpContext currentContext = System.Web.HttpContext.Current;
if (currentContext.Session["Progress"] != null)
{
return currentContext.Session["Progress"].ToString() ;
}
return string.Empty;
}
用于轮询的 JavaScript 用于从 ASP.Net 页面调用上述 Web 服务方法
function ButtonClick() {
StartProgressPoll();
}
function StartProgressPoll() {
t = setInterval(GetOpProgress, 5000);
}
function GetOpProgress() {
WebApplication1.WebService1.GetProgress(Success, Failure);
}
【问题讨论】:
-
您如何定义“许多”用户?但无论如何,如果您的网站已经设计为处理您的正常页面流量,我无法想象每 5 秒的微小请求会导致很多问题。
-
如果不了解背后的架构就无法判断。但这就是负载测试的目的,尝试您的代码,使用您的架构,检查它何时减慢/中断。互联网上的人给你的答案比你能做的测试更准确。
-
@JoeEnos,对于许多用户,我的意思是大约有 50 个用户使用该页面并单击该按钮。但你是对的,Web 服务方法是一个非常快速的调用,因为它只读取会话变量。
-
只有 50 个用户,如果您有任何一种中等体面的硬件和网络,应该不会有任何资源问题。 100 倍的流量应该没问题。
-
@Pierre-LucPineault,是的,你是对的。我需要加载测试我的页面。
标签: c# javascript asp.net threadpool polling