Пакетирование запросов 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. После запуска метода super internalSend (который ставит респондента в очередь), мы сбросим NetConnection и все его обработчики событий. Это подготовит новый NetConnection к следующему сообщению удаленного взаимодействия.
Примечание:
Важно отметить, что это пользовательский не пакетный AMFChannel, если вы хотите безопасно отправлять AMF-сообщения, вам нужно скопировать этот класс и расширить mx.messaging.channels.SecureAMFChannel класс.
Кредит:
Благодарим Ника Джойса, который ответил на его вопрос здесь, на другом форуме.