我在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服务器,最后它们都被立即发送.我已经尝试了我能想到的一切(空循环,回调,延迟) - 没有任何帮助.无论如何,所有请求都会立即发送.
如何使请求同步,所以它会一个接一个地发送请求?有人可以建议任何解决方案?
您无法进行同步呼叫,但您可以等到服务器回复后再发送另一个请求.
但是,如果真的必须在一个循环中向网络服务器发送一千个请求,那么可能存在设计缺陷?
// 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