Apache flex http服务不适用于并行请求

Apache flex http服务不适用于并行请求,apache-flex,httpservice,Apache Flex,Httpservice,我正在使用http服务对象在flex中的方法内发出servlet请求。两个事件同时并行调用该方法。我可以看到两个请求都已到达servlet,但只有一个返回到result事件。这种行为也不一致。httpservice的并行调用是否可能导致某些请求丢失?我确信这两个请求都已到达servlet,并从servlet返回了数据。只是在某些情况下不会触发结果事件。 提前谢谢 包括更好地描述问题的代码 请找到下面的方法。下面的方法“callServlet”由两个单独的事件调用 私有变量httpObj:HTTP

我正在使用http服务对象在flex中的方法内发出servlet请求。两个事件同时并行调用该方法。我可以看到两个请求都已到达servlet,但只有一个返回到result事件。这种行为也不一致。httpservice的并行调用是否可能导致某些请求丢失?我确信这两个请求都已到达servlet,并从servlet返回了数据。只是在某些情况下不会触发结果事件。 提前谢谢

包括更好地描述问题的代码

请找到下面的方法。下面的方法“callServlet”由两个单独的事件调用

私有变量httpObj:HTTPService=newhttpservice()

私有函数callServlet(文本:字符串):void{

Alert.show(文本);
httpObj=新的HTTPService();
httpObj.url=;
httpObj.method=“POST”;
httpObj.resultFormat=“xml”;
httpObj.contentType=“应用程序/xml”;
var requestString:String=text;
httpObj.request=requestString;
httpObj.addEventListener(ResultEvent.RESULT,onResultMethods);
httpObj.addEventListener(FaultEvent.FAULT,onFaultMethod);
httpObj.send();
}
每次调用该方法时,我都传递一个不同的“text”变量。我可以看到警报显示发送给它的两个不同文本。如前所述,这两个请求都到达servlet,并从servlet发送响应。
但是结果事件“onResultMethod”只被调用一次。它也不会调用“faultonFaultMethod”。

是的,我以前见过这个问题,如果您从flex发出多个请求,其中一些请求将丢失,这在3.0次之后就出现了。浏览器有一种停止http调用数的方法,它们一次最多允许2个调用(取决于浏览器),可以将您的请求一个接一个地链接起来,也可以使用单例来管理您的调用

谢谢大家的帮助。虽然我不能保证答案是正确的,但我想我已经明白了这个问题。 上述方法由两个事件调用两次。HttpProject变量是方法callServlet的私有全局变量。在result和fault处理程序方法中,将删除在此方法中创建的侦听器(上面的代码中没有显示)。 因此,我相信当多个事件同时调用该方法时,全局变量httpObj有可能被这两个事件修改,因此这两个事件都会导致使用相同的httpservice对象调用servlet。当第一个调用返回resulthandler时,我正在删除resulthandler的侦听器,因为第二个结果没有到达resulthandler方法


这是我的假设,到目前为止,我没有更好的解决方案。如果有人提出更好的解释,一定要告诉我。

HTTPService.send()
返回一个
AsyncToken
,您应该使用它来跟踪请求。如果您正在使用
HTTPService
lastResult
属性,那么您将获得所描述的行为。如果您需要进一步的帮助,我建议您编辑您的问题并添加您正在使用的代码。谢谢您的回复。但我知道您提到的关于来自浏览器的并发http请求的问题。但在我的例子中,请求已经到达servlet。我可以从servlet日志中看到这一点。只是结果事件并不总是被触发。
        Alert.show(text);
        httpObj = new HTTPService();
        httpObj.url=<servlet URL>;
        httpObj.method="POST";
        httpObj.resultFormat="xml";
        httpObj.contentType="application/xml";
        var requestString:String=text;
        httpObj.request=requestString;
        httpObj.addEventListener(ResultEvent.RESULT,onResultMethods);
        httpObj.addEventListener(FaultEvent.FAULT,onFaultMethod);
        httpObj.send();

    }