2011-12-16 71 views
1

我在一個項目中需要連接到客戶端的服務器並檢索某些圖的數據。在Internet Explorer中保持打開連接(7,8,9)

客戶希望這是實時的東西(他們有一個腳本正在監聽連接並不斷地提供數據)。

我的大問題是,我認爲這不能在IE中完成,就像在Firefox或Chrome中完成一樣簡單。 Firefox和Chrome都支持網絡套接字,所以我認爲我可以製作出完全符合客戶需求的內容。

在IE中,我可以做到這一點的唯一方法是使用setTimeout和ajax調用。

是否有任何其他替代IE?

現在我們正在使用jquery .ajax(),併爲readyState == 3時處理服務器響應的onReadystageChanged事件設置一個回調。但是這不起作用,因爲連接在第一個響應。

此外,由於我們使用跨域服務,因此我將IIS與Application Request Routing模塊用作代理和URL重寫規則。但是,該模塊使用至少1KB的緩衝區來破壞服務器響應。這些服務是由另一家公司創建的,它們不會在其服務器中實施CORS規範。

我該如何解決這個問題並得到沒有緩衝的響應?

謝謝

回答

1

代替WebSockets,您可以使用長輪詢和服務器端承諾。

在服務器上,您可以暫停http請求,使其工作異步。

例jQuery的

poll();  
function poll(){ 
    $.ajax({ 
     url : "http://my-own-domain.com/data/", 
     success : function(data) { 
      //do what you want with data 
      poll(); 
     }, 
     error : function(data) { 
      poll(); 
     } 
    }); 
} 

服務器端例如:

WSRequest req = WS.url("http://the-other-domain.org/data/"); 
Promise<HttpResponse> respAsync = req.getAsync(); 
HttpResponse resp = await(respAsync); 
renderJSON(resp.getString()); 

對於服務器端看一看Play! Framework Async進行了解它是如何完成的。

相關問題