http服务不适用于并行请求

时间:2013-09-04 13:58:19

标签: flex httpservice

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

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

请找到以下方法。以下方法" callServlet"被两个单独的事件调用

private var httpObj:HTTPService = new HTTPService();

private function callServlet(text:String):void {

        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();

    }

每次我调用方法时,我都会传递一个不同的文本&#34;变量。我可以看到警报显示发送给它的两个不同文本。如前所述,两个请求都到达servlet,并从servlet发送响应。 但结果事件&#34; onResultMethod&#34;只调用一次。它不会调用&#34; faultonFaultMethod&#34;任

2 个答案:

答案 0 :(得分:0)

是的,之前我已经看到过这个问题,如果你从flex发出多个请求,其中一些会丢失,那是3.0次。浏览器有一种方法可以停止http呼叫的数量,它们一次最多可以允许2个呼叫(取决于浏览器),可以一个接一个地链接你的请求,或者使用管理你的呼叫的单个。

答案 1 :(得分:0)

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

这是我的假设,截至目前我还没有更好的解决方案。如果有人想出更好的解释,请告诉我。