[英]long Polling webservice
我有一个网页每隔1秒钟会问一次从Web服务中通过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服务,但结果相同。 有什么办法可以做到这一点?
您为什么不简单地计算它请求数据的次数,例如,当它请求超过1000个项目时,然后在那之后返回null。
或获取使webservice调用执行类似操作的代码,并在停止尝试之前仅调用最大次数。
听起来类似于“聊天”应用程序。 处理此问题的算法之一是使轮询逐渐“滑动”,例如:
1)如果n分钟内没有更新,则轮询速率最高为3秒2)如果n分钟内没有更新,则轮询速率最高为5秒,然后为10等3)当您“有活动(非空返回值),将其向下滑动至1秒轮询并重复步骤1和2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.