在RPC调用失败的情况下,尝试多次同时RPC调用的最佳方法是什么?
只是示例:在这种情况下,如果RPC由于网络连接而失败,它将在onFailure(Throwable caught)
中捕获。
现在,它应该再次调用相同的RPC以检查网络连接。最大尝试次数应为3次,然后向用户显示消息,如“网络未建立”
我怎样才能实现它?
有些想法就像在onFailure
中调用相同的rpc调用一样,但这里的请求变得不同了。但是我想要same request have a three request
并且它不是很好的方法而且我不知道它是否有任何好的解决方案。
提前致谢。
答案 0 :(得分:1)
在AsynCallBack
实施中使用计数器。我建议在再次请求服务器之前使用计时器。
此代码应该有效:
final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
final String textToServer = "foo";
greetingService.greetServer(textToServer, new AsyncCallback<String>() {
int tries = 0;
public void onSuccess(String result) {
// Do something
}
public void onFailure(Throwable caught) {
if (tries ++ < 3) {
// Optional Enclose the new call in a timer to wait sometime before requesting the server again
new Timer() {
public void run() {
greetingService.greetServer(textToServer, this);
}
}.schedule(4000);
}
}
});
答案 1 :(得分:0)
@Jens给出了Google网上论坛的答案。
您可以使用自定义RpcRequestBuilder透明地处理给定GWT-RPC接口的所有请求。这个自定义RpcRequestBuilder将进行3次请求尝试,如果所有3次失败,则调用onFailure()方法。
MyRemoteServiceAsync service = GWT.create(MyRemoteService.class); ((ServiceDefTarget)service).setRpcRequestBuilder(new RetryThreeTimesRequestBuilder());
如果多个应用程序组件可能对该信息感兴趣,则自定义RequestBuilder还可以在eventBus上触发“NetworkFailureEvent”。例如,您可以使用黑屏覆盖整个应用程序,并定期尝试将Ping请求发送到您的服务器,直到网络重新联机。您还可以检查onLine HTML 5属性,但它不是100%可靠(https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.onLine)