我有一个网页,每1秒后通过webservice的jQuery json数据询问。如果没有数据,则webservice返回null。
问题是,如果客户端在24小时内在网站上,那么浏览器将收集太多数据并将崩溃。所以我决定在jQuery ajax中将超时设置为60000所以它会等待数据,而在服务器端我试图像这样:
while(true)
{
if(thereIsData){
System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(ActionList);
Context.Response.Output.Write(sJSON);
return;
}
Thread.Sleep(1000);
}
但是如果我使用Thread.Sleep那么它将锁定整个页面。我试过线程EventWaitHandle和相同的结果整个页面被锁定,直到有数据。我也尝试过创建其他web服务但结果相同。我有什么方法可以做到这一点吗?
答案 0 :(得分:0)
为什么不直接计算它请求数据的次数,例如,当它请求超过1000个项目时,然后在该点之后返回null。
或者让代码进行webservice调用以执行类似操作,并且在停止尝试之前只调用它最多次。
答案 1 :(得分:0)
这听起来像应用程序的“聊天”。处理此问题的算法之一是逐步进行轮询的“滑动比例”,例如:
1)如果在n分钟内没有更新,则将轮询率提高到3秒 2)如果没有另外n分钟的更新,则将轮询率提高到5秒,然后是10等 3)当你“有活动(非空返回值)时,将其向下滑回1秒轮询并重复步骤1和2 ......