将 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类。
信用:感谢尼克乔伊斯,他在另一个论坛上回答了他的问题。