1


0

私は、ポート80を介してhttpを使用してリアルタイム通知メカニズムを試作しています。 このプロジェクトの目的は、Flashアプリケーションがリモートサーバー上のイベントにすばやく応答できるようにすることです(特に、コンピュータの横にある電話に接続している着信通話)。 現在のところ、ソケット接続を使用してサーバー上のイベントを低遅延で通知します。これはうまく機能しますが、ファイアウォールには適していません。 クライアントにFlashやSilverlight以外のものをインストールしたくありません。 ブラウザの相互互換性は問題になりません - このアプリケーションでは、クライアントが使用するブラウザを指定できますが、IEが優先されます。

私は接続を閉じずにhttpレスポンスストリーム(ConnectedClientContext.Response.OutputStream.Writeなど)にバイトを書き出すことでクライアントに "イベント"を送信することのない.NETでサーバーHttpHandlerを作りました。大丈夫これらのメッセージを読むことができるアプリケーション。

私の質問:

JavaScript、Flash、またはSilverlightを使用して到着したHTTPを介してサーバーからバイトを受信できますか? これまでのところ、私は「ダウンロードの進行状況」を通知される方法しか見つけることができず、応答が閉じられるまで実際のバイト数を受け取ることはできません。

宜しくお願いします、

ダニエル

3 Answer


1


私はFlashについては知りませんが、Javascript(これはブラウザでの意味です)とSilverlightでは、ほとんどhttpプロトコルに限定されています。

AJAX Http Streaming patternを使用できます。 あなたが試みているものとは異なる基本的な考え方は、データが利用可能になるとすぐに未解決の要求が終了し、新しいものがすぐに非同期的に開始されるということです。

HTTPスタックは純粋に非同期なのでSilverlightにはより多くの選択肢がありますが、 HttpWebRequest.AllowReadStreamBuffering`を false`に設定することでデータが到達し始めるとすぐにストリームを手に入れることができます。 (常にバッファするXmlHttpRequestとは異なります)。


1


通知にCometのアイデアを使うのはとても簡単です。 彗星特有のフレームワークを使う必要すらありません。 応答時にコールバックしてajaxリクエストを実行し、これをループにラップするだけで、GUIアプリケーションのようにイベントループができます。 サーバー側では、イベントまたはタイムアウト(これは単に 'null’イベントです)のいずれかが発生するまで、要求に答えても構いません。


0


FlexとFlashには、データプッシュをサポートするAMF / XMLリモート処理ライブラリがいくつかあります。 私は確かにそれを調べます。

これらのライブラリはこれを実現するために Comet - のような実装を使用しています。