AdobeAIR HTTP连接限制
我正在开发一个AdobeAIR应用程序,它可以将文件上传到运行Apache和PHP的web服务器。可以同时上载多个文件,应用程序还可以调用web服务器来请求各种API 我遇到的问题是,如果我启动两个文件上载,在上载过程中,任何其他HTTP请求都会超时,这会给应用程序和用户造成问题 AdobeAIR应用程序是否仅限于2个HTTP连接,或者是否存在其他问题? 通过对这个问题的搜索,我没有发现太多,但有一篇文章确实指出,它不仅仅限于两个连接 文件上传是通过调用file classes upload方法来执行的,API调用是使用HTTPService类来完成的。我使用的开发web服务器是WAMP服务器,但是当应用程序发布时,它将与LAMP服务器通信 谢谢, 授予 以下是我用来上传文件的代码:AdobeAIR HTTP连接限制,http,file-upload,air,wamp,two-connection-limit,Http,File Upload,Air,Wamp,Two Connection Limit,我正在开发一个AdobeAIR应用程序,它可以将文件上传到运行Apache和PHP的web服务器。可以同时上载多个文件,应用程序还可以调用web服务器来请求各种API 我遇到的问题是,如果我启动两个文件上载,在上载过程中,任何其他HTTP请求都会超时,这会给应用程序和用户造成问题 AdobeAIR应用程序是否仅限于2个HTTP连接,或者是否存在其他问题? 通过对这个问题的搜索,我没有发现太多,但有一篇文章确实指出,它不仅仅限于两个连接 文件上传是通过调用file classes upload方法
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");
}
以下是API调用的代码:
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;
}
因此,当我研究这个问题时,我在文档中发现了有关使用File.upload()的信息: 开始将文件上载到远程服务器。尽管Flash Player对您可以上传或下载的文件大小没有限制,但该播放器官方支持上传或下载高达100 MB的文件。在调用此方法之前,必须调用FileReference.browse()或FileReferenceList.browse()方法 侦听器接收事件以指示上载的进度、成功或失败。虽然可以使用FileReferenceList对象让用户选择多个文件进行上载,但必须逐个上载文件;为此,请遍历FileReference对象的FileReferenceList.fileList数组 FileReference.upload()和FileReference.download()函数是 非阻塞。这些函数在调用后返回,在 文件传输完成。此外,如果文件引用 对象超出范围,任何尚未完成的上载或下载 在该对象上完成的操作将在离开作用域时取消。确定 只要 预计将继续上载或下载 我想知道上传多个文件是否会给你带来问题。我看到您正在使用browserForOpen()而不是browse()。看起来他们可能也在做同样的事情。。。但也许不是 我在文件类文档中也看到了这一点 请注意,由于Flash Player中添加了新功能,在发布到Flash Player 10时,一次只能激活以下操作之一:FileReference.browse()、FileReference.upload()、FileReference.download()、FileReference.load()、FileReference.save()。否则,Flash Player将抛出运行时错误(代码2174)。使用FileReference.cancel()停止正在进行的操作。此限制仅适用于Flash Player 10。以前版本的Flash Player不受同时执行多个操作的限制 当您说您允许用户上载多个文件时,您是指对browse()和upload()的后续调用,还是指一个包含多个文件的调用?看起来,如果你试图打多个单独的电话,这可能是一个问题 不管怎样,我不知道这是否有多大帮助。看起来你所尝试做的肯定是可能的。我只能猜测,出现问题的可能是实施方面的问题。祝你好运:) 参考:
如果您使用的是windows系统,则AdobeAIR将用于访问web。默认情况下,此库限制以下项的数量: WinInet限制它与单个HTTP服务器的同时连接数。如果超过此限制,请求将阻塞,直到当前连接之一完成。这是经过设计的,符合HTTP规范和行业标准 。。。到单个HTTP 1.1服务器的连接仅限于两个同时连接 有一个API可以更改此限制的值,但我不知道它是否可以从空中访问 由于此限制也会影响网站的页面加载速度,因此一些网站正在对图像、javascripts和样式表等工件使用多个DNS名称,以允许浏览器打开更多并行连接
因此,如果您正在控制服务器部分,一个解决方法可能是创建DNS别名,如
www.example.com
,用于上传和api.example.com
,用于api请求。正因为我在考虑一个非常类似的问题,因为我的一个实际应用程序中出现了错误,我决定写下我找到的答案
我列举了11个例子
http连接
我想知道为什么我的Flex4应用程序停止工作并抛出一个HTTP错误,尽管它以前在同一服务器上只有5个同时的HttpConnections时工作得很好
我自己测试了这个,因为我在Flex文档或互联网上没有找到任何与此相关的内容
我发现Flex应用程序抛出运行时错误的原因是使用了5个以上的HTTPConnections
我决定一个接一个地实例化连接作为临时解决方法:在另一个收到数据后加载下一个连接,依此类推。
当然,这只是暂时的,因为接下来的步骤之一是修改响应的服务器代码,使其响应一个请求,该请求包含一个响应中多个表的请求结果。当然,客户端应用程序逻辑也需要更改。我知道AIR应用程序可以发送的HTTP请求数量没有功能限制。你能发布你用来发送请求的代码吗?是否有可能修改“并发”属性