【问题标题】:Retrofit 2 calling same request so many unwanted times in my appRetrofit 2 在我的应用程序中多次调用相同的请求
【发布时间】:2018-06-04 10:13:19
【问题描述】:

我有一个 Android 应用程序已经上传到商店并且工作正常,有时当很多用户同时打开应用程序时(例如发送通知时),我们的服务器会过载并停止响应大约 10 到 15分钟。我正在使用 Retrofit 2 从应用程序向我们的服务器发送请求,我检查了所有应用程序请求,没有任何地方发生不应该或不需要的请求,最后,我添加了一个日志拦截器来改造跟踪请求,我很惊讶每个请求都被无缘无故地调用了十多次!如下图所示:

从应用程序调用的所有请求都会无缘无故地发生这种情况。我的 Retrofit 2 服务生成器如下:

private static OkHttpClient.Builder httpClient
        = new OkHttpClient.Builder().connectTimeout(10000, TimeUnit.SECONDS)
        .readTimeout(10000, TimeUnit.SECONDS).addInterceptor(new FakeInterceptor())
        .addNetworkInterceptor(new StethoInterceptor())
        .retryOnConnectionFailure(false);

private static Gson gson = new GsonBuilder()
            .registerTypeAdapter(Date.class, new DateDeserializer())
            .create();

private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL));



public static <S> S createService(Class<S> serviceClass) {

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
        httpClient.addInterceptor(logging);

        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(serviceClass);
    }

我确信 request 只从我的代码中调用过一次,但我不知道为什么 Retrofit 会发出所有这些无用和不必要的请求。可能是什么问题?在此先感谢,非常感谢任何帮助。

【问题讨论】:

  • 发布触发请求的代码,改造不会执行调用,除非你可能在某处触发它
  • 旁注,您应该对通知保持警惕,以免造成您自己的服务器受到 ddos​​...
  • @elmorabea 我像往常一样触发请求,我将 createService 中的客户端定义为全局变量,然后使用 client.enqueue 触发请求。
  • 可能你是在生命周期方法中做入队调用,或者是重复调用的东西,贴出代码让我们帮忙
  • @Shmuel 我没有很多用户,基本上,通知是同时打开 200 到 500 个用户,但是每个用户请求的数量是巨大的,如您所见。如果我解决了用户巨大请求数的问题,我想它会解决服务器过载的问题。

标签: android retrofit retrofit2 okhttp3


【解决方案1】:

这是因为您正在创建 Retrofit 客户端的多个实例。你应该在你的类中声明一个 Retrofit 的静态实例并改变

Retrofit retrofit = builder.client(httpClient.build()).build();

if(retrofit == null) { retrofit = builder.client(httpClient.build()).build(); }

参考:https://github.com/square/retrofit/issues/1724

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多