2011-12-16 8 views
1

私はクライアントのサーバーに接続し、グラフのデータを取得する必要があるプロジェクトに参加しています。Internet Explorer(7,8,9)でオープンな接続を維持する

クライアントはこれをリアルタイムで何かにしたいと考えています(接続をリスンし、データを絶えずフィードしているスクリプトがあります)。

私の大きな問題は、これがFirefoxやChromeで行われるのと同じくらい簡単にIEで実行できるとは思わないということです。 FirefoxとChromeはどちらもWebソケットをサポートしているので、クライアントが望むものを正確に行うことができると思う。

私はこれを行うことができる唯一の方法は、ajax呼び出しでsetTimeoutを使用することです。

IEのための他の選択肢はありますか?

今のところ、jquery .ajax()を使用しており、readyState == 3のときにサーバーの応答を処理するonReadystageChangedイベントのコールバックを設定しています。しかし、これは期待通りに機能しません。応答。

また、クロスドメインサービスを使用しているため、アプリケーションリクエストルーティングモジュールをプロキシとして使用し、URL書き換えルールを使用しています。しかし、このモジュールは少なくとも1KBのバッファーを使用してサーバーの応答を破壊します。サービスは、サーバーにCORS仕様を実装しない別の会社によって作成されました。

これを回避し、バッファリングせずに応答を受信するにはどうすればよいですか?

ありがとうございました

答えて

1

Webポケットの代わりに、長いポーリングとサーバーサイドの約束を使用できます。

サーバー上で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を見てみましょう。

関連する問題