2010-09-28 32 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