2009-04-10 9 views
1

私は現在JavaプロジェクトをFlex 3に翻訳しています。プロジェクトの大部分は非同期通信です。FLEXの新機能 - Javaからの非同期通信の翻訳

プログラムはストリームに接続し、データのダウンロードを開始します。接続直後に、HTTPで同じフォーマット(キーフレーム)でコンテキストデータをダウンロードする必要があります。ストリームまたはキーフレーム中のさまざまな時点で、追加のHTTPコールが必要になる場合があります。暗号化キーを取得します。

Javaでは、ブロック呼び出しを使用してHTTPリクエストを実行して、キーフレームを取得したり、HTTPが完了している間にキーフレームやストリームを効果的に一時停止したりすることができます。

残念ながら、Flexはシングルスレッドであり、HTTPリクエストは非同期コールバックで実装されているため、同じ方法でコードを実装することは不可能です。

Flexには初めてのので、通常の練習がこれでどうなるかわかりません。現在、状態を保存して終了する予定です.HTTP補完を使用して、一時停止したストリームを再開します。または、タイマを使用することもできます...

しかし、ストリームの場合、処理中のデータをデカップリングしてHTTPリクエストの処理中にバッファリングする必要がありますか?または、進捗イベントを無視して、Flexおよび/またはOSにバッファリングさせることは安全ですか?

誰もがこれをもっと簡単にするアーキテクチャについてアドバイスをしていますか?

ありがとうございます!

EDIT:dirkgently答えてくれてありがとう今のところ...

- 私はあなたがで取得しているものを理解していないが、私はそれに見ていきます。

brd6644 - 接続(ストリーム)の1つは既にローソケットです。問題は、それを一時停止し、別のソースから中間ストリームの一部のデータを取得することでした。

CookieOfFortune - 役に立ちます。ありがとうございます。

答えて

1

フレックスはHTTPServiceクラスです。あなたの問題記述の外見から、私はそのような複数のオブジェクトを作成し、それらを異なるイベントハンドラにバインドすると言うでしょう - 特定の要求に対して必要な処理のタイプに依存します。

<mx:HTTPService url="{myURL}" id="myHTTPData" method="GET" 
       result="cacheData()" fault="downloadFault" 
       resultFormat="object"> 

<mx:HTTPService url="{myURL2}" id="mySessKey" method="GET" 
       result="saveSessKey()" fault="authFault" 
       resultFormat="object"> 

HTTPServiceの周りにカスタムラッパーを作成し、代わりにこれらを使用することをお勧めします。これにより、カスタムイベントハンドラを使用してオブジェクトを簡単に作成できます(完了したら解放できます)。

0

生のActionScriptソケットAPI経由での接続はどうですか?必要に応じてデータを読み取り、イベントを送出することができます。各イベントで個別のHTTPService呼び出しがトリガーされ、データが取得されます。

0

HTTPServiceのsend()メソッドを使用すると、AsyncTokenが返されます。 AsyncTokenを使用してイベントを同期することができます。

private function streamResultHandler(event:ResultEvent):void 
{ 
    ... 
    for(var str : frame) 
    { 
     if(str == "getEncryptionKey") 
     { 
      var token:AsyncToken = keyHTTPService.send(); 
      var tokenResult:Object = token.result; 
      var key = keyBuffer; 
      ... 
     } 
    } 
} 

private function keyHTTPServiceResultHandler(event:ResultEvent):void 
{ 
    keyBuffer = event.result; 
} 
関連する問題