【发布时间】: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