我正在使用RequestBuilder
来计算花费太长时间的GWT请求:
RequestBuilder requestBuilder = _service.getStatistics(callback);
requestBuilder.setTimeoutMillis(5000);
try {
requestBuilder.send();
} catch (RequestException e) {
GWT.getUncaughtExceptionHandler().onUncaughtException(e);
}
有没有办法通知被调用的远程服务该调用在客户端超时并且应该被取消?
答案 0 :(得分:5)
除非您再打一次电话告诉远程服务前一个电话被取消了!
答案 1 :(得分:1)
这实际上取决于。如果服务器做了大量工作(并且您不在Google App Engine上),您可以保留请求并调用request.cancel()。这将结束浏览器的请求,但服务器将继续工作。
根据您要返回的数据的格式,您可以让服务器在进行呼叫时定期将一些空数据刷新到客户端。如果客户端已取消请求并终止HTTP连接,这将导致flush抛出IOException。然后,您可以捕获此请求并停止在服务器端处理请求。