0

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

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

一些想法,例如调用相同的 rpc 调用,onFailure但这里的请求变得不同。但我想要same request have a three request这不是好的方法,我不知道是否有任何好的解决方案。

提前致谢。

4

2 回答 2

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);
      }
    }
  });
于 2013-07-17T10:19:09.933 回答
0

@Jens 从 Google Groups 给出了这个答案。

您可以使用自定义 RpcRequestBuilder 透明地处理给定 GWT-RPC 接口的所有请求。此自定义 RpcRequestBuilder 将进行 3 次请求尝试,如果所有 3 次都失败,则调用 onFailure() 方法。

MyRemoteServiceAsync 服务 = GWT.create(MyRemoteService.class); ((ServiceDefTarget) 服务).setRpcRequestBuilder(new RetryThreeTimesRequestBuilder());

如果多个应用程序组件可能对该信息感兴趣,自定义 RequestBuilder 也可以在 eventBus 上触发“NetworkFailureEvent”。例如,您可以用黑屏覆盖整个应用程序,并定期尝试向您的服务器发送 Ping 请求,直到网络恢复在线。您还可以检查 onLine HTML 5 属性,但它不是 100% 可靠的(https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.onLine

于 2013-07-17T16:39:05.390 回答