title: Adobe AIR HTTP Connection Limit
body: <p>I'm working on an Adobe AIR application which can upload files to a web server, which is running Apache and PHP. Several files can be uploaded at the same time and the application also calls the web server for various API requests.</p>
  
  <p>The problem I'm having is that if I start two file uploads, while they are in progress any other HTTP requests will time out, which is causing a problem for the application and from a user point of view.</p>
  
  <p>Are Adobe AIR applications limited to 2 HTTP connections, or is something else probably the issue?
  From searching about this issue I've not found much but one article did indicated that it wasn't limited to just two connections.</p>
  
  <p>The file uploads are performed by calling the File classes upload method, and the API calls are done using the HTTPService class. The development web server I am using is a WAMP server, however when the application is released it will be talking to a LAMP server.</p>
  
  <p>Thanks,
  Grant</p>
  
  <p>Here is the code I'm using to upload the file:</p>
  
  <pre><code>protected function btnAddFile_clickHandler(event:MouseEvent):void
  {
      // Create a new File object and display the browse file dialog
      var uploadFile:File = new File();
      uploadFile.browseForOpen("Select File to Upload");
      uploadFile.addEventListener(Event.SELECT, uploadFile_SelectedHandler);
  }
  
  private function uploadFile_SelectedHandler(event:Event):void
  {
      // Get the File object which was used to select the file
      var uploadFile:File = event.target as File;
      uploadFile.addEventListener(ProgressEvent.PROGRESS, file_progressHandler);
      uploadFile.addEventListener(IOErrorEvent.IO_ERROR, file_ioErrorHandler);
      uploadFile.addEventListener(Event.COMPLETE, file_completeHandler);
  
      // Create the request URL based on the download URL
      var requestURL:URLRequest = new URLRequest(AppEnvironment.instance.serverHostname + "upload.php");
      requestURL.method = URLRequestMethod.POST;
  
      // Set the post parameters
      var params:URLVariables = new URLVariables(); 
      params.name = "filename.ext";
      requestURL.data = params;
  
      // Start uploading the file to the server
      uploadFile.upload(requestURL, "file");
  }
  </code></pre>
  
  <p>Here is the code for the API calls:</p>
  
  <pre><code>private function sendHTTPPost(apiFile:String, postParams:Object, resultCallback:Function, initialCallerResultCallback:Function):void
  {
      var httpService:mx.rpc.http.HTTPService = new mx.rpc.http.HTTPService();
      httpService.url = AppEnvironment.instance.serverHostname + apiFile;
      httpService.method = "POST";
      httpService.requestTimeout = 10;
      httpService.resultFormat = HTTPService.RESULT_FORMAT_TEXT;
      httpService.addEventListener("result", resultCallback);
      httpService.addEventListener("fault", httpFault);
      var token:AsyncToken = httpService.send(postParams);
  
      // Add the initial caller's result callback function to the token
      token.initialCallerResultCallback = initialCallerResultCallback;
  }
  </code></pre>