0

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

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

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

私有变量 httpObj:HTTPService=new HTTPService();

私有函数 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();

    }

每次我调用该方法时,我都会传递一个不同的“文本”变量。我可以看到警报显示发送给它的两个不同的文本。如前所述,两个请求都到达了 servlet,并且从 servlet 发送了响应。但是结果事件“onResultMethod”只被调用一次。它也没有调用“faultonFaultMethod”。

4

2 回答 2

0

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

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

于 2013-09-08T05:31:36.987 回答
0

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

于 2013-09-04T20:55:17.467 回答