0

URLLoader を使用して、HTTP リクエストを送信し、サーバーからイベントをリッスンできます。私の質問は、URLLoader が complete、progress、ioError イベントをどこでどのようにディスパッチするかです。サーバー側なので、dispatchEvent を呼び出しません。

次のようなコード:

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.load(new URLRequest("http://example/lookup"));

前述のイベントをディスパッチするオブジェクトはどれですか? また、どこにディスパッチしますか?

4

2 に答える 2

0

URLLoaderHTTPヘッダーを介してそれを行います。私は HTTP ヘッダーにあまり詳しくありませんが、次のことは知っています (経験と LiveDocs を読むことから):

  • ProgressEvent.PROGRESSダウンロードが進行している限り、(Flash SDK 内で事前に定義された) 一定の間隔でディスパッチされます。ダウンロードされたすべてのバイトでディスパッチされるわけではなく、定期的な時間間隔と思われるもの以外に、ディスパッチ方法に関する韻や理由はありません
  • ProgressEvent.PROGRESS イベントのbytesTotalプロパティはContent-Lengthヘッダーから取得されます。リクエストで Range ヘッダーを送信すると、レスポンスで Content-Length ヘッダーが無効になり、0 bytesTotal が返されます。をリッスンしHTTPStatusEvent.HTTP_STATUS_RESPONSE、ヘッダーをループして、Content-Range ヘッダーを見つけることで、これを回避できます。RegEx を使用して、そのオブジェクトから長さを取得できます。
  • ProgressEvent.PROGRESS イベントのbytesLoadedプロパティは内部で処理されます。URLLoader は にダウンロードされたすべてのバイトを保存ByteArrayし、bytesLoaded は単に ByteArray のlengthプロパティです
  • どのように発火するのかはわかりEvent.COMPLETEませんが、接続が切断されたときに発生すると思われます。
  • IOErrorEvent.IO_ERRORFlash SDK によって内部的に事前定義された状況に従ってディスパッチされます。最も一般的には、404 エラーが発生したときにディスパッチされます。それを超えて、私は確信が持てません。

これらのイベントを適切に発生させるために、各リクエストで有効な HTTP ヘッダーを送信する以外は、サーバー側で何もする必要はありません。ほとんどの場合、すべてが内部で処理されます。

LiveDocsを読むことを強くお勧めします。それらは信じられないほど詳細であり、非常に使いやすく有益な方法で書かれています。これは、コーディング ドキュメントでは非常に珍しいことです。

于 2013-01-15T16:09:20.033 に答える
0

それらは仮想マシンによってトリガーされ、元々はNPAPI(たとえばGecko APIリファレンス)またはクロムのPPAPIのブラウザー実装のどこかで発生します(私が推測するように、これについてはわかりません)。

于 2013-01-14T12:41:04.623 に答える