繁体   English   中英

长轮询Web服务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM