Java GWT中的异步调用是否由于另一个需要很长时间才能完成的异步调用而被阻止
我有以下代码,每3秒异步执行一次Java GWT中的异步调用是否由于另一个需要很长时间才能完成的异步调用而被阻止,java,gwt,asynchronous,Java,Gwt,Asynchronous,我有以下代码,每3秒异步执行一次 <Scheduler.get().scheduleFixedDelay(new RepeatingCommand() { @Override public boolean execute() { try { RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "someurl"); Request
<Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@Override
public boolean execute() {
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "someurl");
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
}
public void onResponseReceived(Request request, Response response) {
// do some work
}
});
} catch (RequestException e) {}
return true;
}
}, 3000);
我原以为调度程序将在每3秒钟进行一次调用,但当另一个调用需要更多时间才能完成时,调度程序内部的调用将被阻止,这应该不是因为所有调用都是异步调用
如果上述场景中出现任何错误,请告知我。
onResponseReceived
在UI线程中执行。由于只有一个UI线程,因此它执行的所有事件都将排队且不会重叠。这可能是由于连接限制造成的
在web浏览器中,同时连接到一个域是有限制的。如果超过此限制,连接将排队
根据网络浏览器的不同,IE可以有8-6个连接,甚至只有2个连接。参见此
您可以尝试增加默认限制,并检查是否存在此问题。谢谢您的回复。当我说另一个需要很长时间才能完成调用的调用不是来自调度程序重复命令。当调度器中的一个调用需要很长时间才能完成时,这对我来说很好。但是我不明白为什么scheduleFixedDelay中的调用会等待另一个调用完成,该调用源自上述代码中提到的不同方法;但我不确定在GWT中对他们的支持是什么样的。其他选项包括将长时间运行的计算移动到服务器,或者,为了使页面响应,将客户端上的计算分解为多个步骤,其中每个步骤在单独的UI周期中执行(。
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "someurl");
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
}
public void onResponseReceived(Request request, Response response) {
// do some work which takes long time to finish
}
});
} catch (RequestException e) {}