当前位置:  开发笔记 > 编程语言 > 正文

如何从actionscript发出同步URL请求?

如何解决《如何从actionscript发出同步URL请求?》经验,为你挑选了1个好方法。

我在actionscript中有一个很大的循环,它将大量数据发送到url:

for(var i=0;i<1000;i++) {
    var request:URLRequest = new URLRequest();
    request.url = url;
    request.method = URLRequestMethod.POST;
    request.data = data;

    var loader:URLLoader = new URLLoader();

    loader.load(request);
}

问题是因为URLLoader只能进行异步调用,它会立即发送所有数千个请求,从而导致Web服务器被杀死.

此外,它有点奇怪.让我们说循环运行了5分钟.整整5分钟没有请求进入Web服务器,最后它们都被立即发送.我已经尝试了我能想到的一切(空循环,回调,延迟) - 没有任何帮助.无论如何,所有请求都会立即发送.

如何使请求同步,所以它会一个接一个地发送请求?有人可以建议任何解决方案?



1> Patrick..:

您无法进行同步呼叫,但您可以等到服务器回复后再发送另一个请求.

但是,如果真的必须在一个循环中向网络服务器发送一千个请求,那么可能存在设计缺陷?

// small example to see how do the chaining call

class A extends EventDispatcher {
 private var urlLoader:URLLoader;
 private var urlRequest:URLRequest;
 private var sendCount:int=0;

 //......

 public function init(url:String):void{
  urlLoader=new URLLoader();
  urlLoader.addEventListener(Event.COMPLETE, sendData);
  urlRequest = new URLRequest();
  request.url = url;
  request.method = URLRequestMethod.POST;
  count=1000;
 }

 //....
 private var data:Object;

 //.....
 // 
 function sendData(e:Event=null):void{
  if (count-- > 0) {
   urlRequest.data = data; // put the data based on the counter
   urlLoader.load(urlRequest);
  } else {
   urlLoader.removeEventListener(Event.COMPLETE, sendData);
   dispatchEvent(new Event(Event.COMPLETE));
  }
 }
}


var a:A=new A();
a.addEventListener(Event.COMPLETE, function():void{
 trace("send finished");
}); // listen to the event complete so
    // you know when you send is finished

a.init("http://...."); // ok init your send
a.sendData(); // and start the send that will be chain each time the webserver answer

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有