2010-09-28 71 views
0

我有一个网页,每隔1秒后通过jQuery json数据从webservice请求。如果没有数据,则webservice返回null。长查询webservice

问题是,如果客户端在现场超过24小时,那么浏览器将收集太多的数据并将崩溃。所以我决定暂停在jQuery的阿贾克斯设置为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

对不起回答,然后unanswering。最初以为这是一个jQuery的问题。我不认为你会暂停你的应用程序的第二个服务器端没有它锁定浏览器,但我将会让更多合格的专家来回答这个问题。可能有一个解决方法啊。 – clifgriffin 2010-09-28 12:58:46

+0

“浏览器会收集太多数据”是什么意思?看来,如果WS在大多数情况下返回null,这不会是一个问题。这似乎是我,你需要在客户端处理这个问题,如果它太大,清理一些数据。 – mikeymo 2010-09-28 13:11:22

+0

如果我返回null,那么还有其他数据像头一样发送。我怎样才能清除JavaScript浏览器的缓存? – Woland 2010-09-28 13:42:45

回答

0

例如,为什么不计算它请求数据的次数,以及何时请求超过1000个项目,然后在该点之后返回null。

或者让webservice调用的代码做类似的事情,并且在它停止尝试之前调用它的最大次数。

+0

问题是,即使webservice返回null它最终会崩溃浏览器 – Woland 2010-09-28 13:00:06

+0

ather 24小时我的铬将超过400 mb的ram – Woland 2010-09-28 13:00:47

+0

第二个选项将工作,虽然它在一段时间后停止向web服务发出请求? – 2010-09-28 13:01:11

0

这听起来很像一个类似于应用程序的“聊天”。处理这个问题的算法之一是逐步“轮询”轮询,例如:

1)如果在n分钟内没有更新返回,则轮询轮询速率高达3秒 2)如果没有更新的另一个n分钟,5分钟的冲击轮询率,然后10等 3)当你有“活动(非空返回值),滑回到1秒轮询和重复步骤1和2 .. ...

+0

Jes它与聊天应用类似。我有这个解决方案。但是,回到问题中,是否有可以暂停Web服务威胁而不将其锁定到其他请求,以便我可以使用上述等待数据解决方案? – Woland 2010-09-28 13:19:51

+0

不是我知道..... javascript是单线程的,所以当你发出http请求时,它会等待响应(阻止客户端)。如果在n次请求(或某个时间段)之后重定向回页面(Response.Redirect类型的操作),那么浏览器将被迫在页面上进行全面刷新......这可能会刷新一些资源使用率随着时间的推移逐渐升高。 – mikeymo 2010-09-28 13:26:46

+0

好jess我已经做到这一点,如果没有其他解决方案。我必须先保存客户端没有保存的数据,然后重新加载它,它的很多工作;( – Woland 2010-09-28 13:33:29