尝试多次相同RPC调用的最佳方法是什么

时间:2013-07-17 10:06:22

标签: gwt rpc

在RPC调用失败的情况下,尝试多次同时RPC调用的最佳方法是什么?

只是示例:在这种情况下,如果RPC由于网络连接而失败,它将在onFailure(Throwable caught)中捕获。 现在,它应该再次调用相同的RPC以检查网络连接。最大尝试次数应为3次,然后向用户显示消息,如“网络未建立” 我怎样才能实现它?

有些想法就像在onFailure中调用相同的rpc调用一样,但这里的请求变得不同了。但是我想要same request have a three request并且它不是很好的方法而且我不知道它是否有任何好的解决方案。

提前致谢。

2 个答案:

答案 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