AMFリクエストのHTTPへのバッチ処理は、NetConnectionレベルで行われます。したがって、残念ながら、AMF要求のバッチ処理を停止する最善の方法は、カスタムバージョンのmx.messaging.channels.AMFChannelを実装することです。ただし、これは非常に簡単で、リクエストをキューに入れて後で呼び出すよりもおそらく簡単です。
デフォルトのAMFChannelを使用する代わりに、代わりに以下を使用します。
package services
{
import flash.events.AsyncErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.net.NetConnection;
import mx.messaging.MessageResponder;
import mx.messaging.channels.AMFChannel;
public class NonBatchingAMFChannel extends mx.messaging.channels.AMFChannel
{
public function NonBatchingAMFChannel(id:String = null, uri:String = null)
{
super(id, uri);
}
override protected function internalSend(msgResp:MessageResponder):void
{
// AMFChannel internalSend
super.internalSend(msgResp);
// Reset the net connection.
_nc = new NetConnection();
_nc.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
_nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
_nc.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
_nc.connect(this.url);
}
}
}
魔法はinternalSendメソッドをオーバーライドすることで起こります。スーパーinternalSendメソッド(メッセージレスポンダーをキューに入れる)を実行した後、NetConnectionとそのすべてのイベントハンドラーをリセットします。これにより、新しいNetConnectionが次のリモーティングメッセージに対応できるようになります。
注:これはカスタムの非バッチAMFChannelであることに注意してください。AMFメッセージを安全に送信する場合は、このクラスをコピーしてmx.messaging.channels.SecureAMFChannelクラスを拡張する必要があります。
クレジット:別のフォーラムで彼の質問に答えたニックジョイスのクレジット。