Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AdobeAIR HTTP连接限制_Http_File Upload_Air_Wamp_Two Connection Limit - Fatal编程技术网

AdobeAIR HTTP连接限制

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方法

我正在开发一个AdobeAIR应用程序,它可以将文件上传到运行Apache和PHP的web服务器。可以同时上载多个文件,应用程序还可以调用web服务器来请求各种API

我遇到的问题是,如果我启动两个文件上载,在上载过程中,任何其他HTTP请求都会超时,这会给应用程序和用户造成问题

AdobeAIR应用程序是否仅限于2个HTTP连接,或者是否存在其他问题? 通过对这个问题的搜索,我没有发现太多,但有一篇文章确实指出,它不仅仅限于两个连接

文件上传是通过调用file classes upload方法来执行的,API调用是使用HTTPService类来完成的。我使用的开发web服务器是WAMP服务器,但是当应用程序发布时,它将与LAMP服务器通信

谢谢, 授予

以下是我用来上传文件的代码:

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请求数量没有功能限制。你能发布你用来发送请求的代码吗?是否有可能修改“并发”属性