【问题标题】:How to send data away immediately by URLLoader in ActionScript3?如何通过 ActionScript 3 中的 URL 加载器立即发送数据?
【发布时间】:2013-05-21 12:36:53
【问题描述】:

首先感谢您的阅读。

这是我的代码:

private function send( pkt:ByteArray )
{
     var int count = 0;
     var request:URLRequest = new URLRequest( ... );
     var loader:URLLoader = new URLLoader( ... );

     request.contentType = URLLoaderDataFormat.BINARY;
     request.method = URLRequestMethod.POST;
     loader.addEventListener(Event.COMPLETE, loader_complete);
     loader.dataFormat = URLLoaderDataFormat.BINARY;

     request.data = pkt;
     loader.load( request );

     //to pause the execution
     while( count < 100000000 );
}

在最后一个 while 循环结束之前,不会调度 COMPLETE 事件。 也就是说在 URLLoader.load( URLRequest ) 之后,loader 不会立即将数据发送出去(没有延迟)? 导致需要连续执行许多 loader.load(request) 命令,并且按顺序,我需要按顺序为每个加载命令立即发送数据。 如何解决?

谢谢。

【问题讨论】:

  • 您是否要分块上传文件?
  • 嗯,我不明白,你能再澄清一下你的问题吗?您可以同时启动任意数量(理论上)的加载请求,并且在那里不需要。
  • 例如,有 4 个 loader.load() 命令,分别加载 4 个 chunk 数据(依次为 c1、c2、c3、c4)到服务器。服务器可能会按 c2、c3、c1、c4(多线程)的顺序接收块,这不是我的预期。所以我希望 c1 在 loader.load(c1) 之后“立即”被送走,然后是 c2、c3 等等。抱歉表达不好。

标签: actionscript-3 post urlloader


【解决方案1】:

如果我理解正确,您正在寻找这样的东西:

private function loader_complete(e:Event):void{
    if(this._ba.bytesAvailable > 0){
        this.send();
    }
}

private function send():void{
       var sendBA:ByteArray = new ByteArray();
       this._ba.readBytes(sendBA, 0, Math.min(1024, this._ba.bytesAvailable));
       var request:URLRequest = new URLRequest("...");
       request.contentType = URLLoaderDataFormat.BINARY;
       request.method = URLRequestMethod.POST;
       request.data = sendBA;
       var loader:URLLoader = new URLLoader(request);
       loader.addEventListener(Event.COMPLETE, loader_complete);
       loader.dataFormat = URLLoaderDataFormat.BINARY;
}

【讨论】:

  • 那么 Event.COMPLETE 什么时候会被派发?
  • 加载程序完成后 :)
  • 这就是我关心的问题,我需要加载器立即完成它的工作(没有延迟,在下一个 loader.load() 命令之前)
  • 请原谅,但您认为这是如何工作的?你不能说“我需要它立即完成”,突然间所有的物理和技术定律都消失了。传输数据需要时间。
  • 可以在下一个 load() 命令之前发送。问题是 AS 将收集几个 load() 命令并同时发送它们。我需要按顺序执行 load() 命令(一次 load() 一次)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
相关资源
最近更新 更多