gpt4 book ai didi

android - okHttp3保持 Activity 连接不起作用

转载 作者:行者123 更新时间:2023-12-05 00:20:50 25 4
gpt4 key购买 nike

我正在使用 okhttp3 和 retrofit2 来获取 json 文件。我尝试了一切以使用保持 Activity 连接来更快地下载数据,但似乎没有任何效果。

我已经实现了拦截器并添加了 keep-alive header 。但似乎它只是不想工作。有人可以查看我的代码并告诉我我在这里做错了什么吗?这是我的代码:

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
ConnectionPool connectionPool = new ConnectionPool(3, 10, TimeUnit.MINUTES);
Gson gson = new GsonBuilder()
.setLenient()
.create();

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.connectionPool(connectionPool)
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS);
httpClient.interceptors().add(logging);
httpClient.interceptors().add(new Interceptor() {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request original = chain.request();

// Customize the request
Request request = original.newBuilder()
.header("Connection", "Keep-Alive")
.method(original.method(), original.body())
.build();

try {
Response response = chain.proceed(request);
if (!response.isSuccessful()) {
response.close();
connectionPool.evictAll();
Log.d("okokok", "evict");
return chain.proceed(request);
} else {
// Customize or return the response
Log.d("okokok", "return response");
return response;
}
} catch (IOException e) {
e.printStackTrace();
connectionPool.evictAll();
return chain.proceed(request);
}
}
});

OkHttpClient client = httpClient.build();
Retrofit retrofit = new Retrofit.Builder()

.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();

postService = retrofit.create(PostService.class);

根据此代码, header 应包含 Keep-Alive 并且连接不应关闭至少一分钟。

我还检查了我的服务器,发现它确实接受了 Keep-Alive header ,并且在 GTMatrix 测试中也表明 Keep-Alive 确实在我的服务器上工作。但由于某种原因,android 应用程序不断关闭连接,每次我加载新文件时,都需要时间与服务器建立新连接。

我尝试使用 Firebase 实时数据库并保存了我的 json 数据。当我从那里查询时,我惊讶地发现数据下载速度与第一次查询的改造完全相同,但在第一次查询之后,其他每个查询都需要几毫秒来加载数据。这意味着比改造快 10 到 20 倍。

我想在这里添加的一件事是,我正在使用 Glide 从服务器加载图像,而 Glide 似乎很好地使用 Keep-Alive 设置安静,因为 Glide 非常有效地加载图像,完全没有延迟。所以这个下载慢的问题似乎只和okhttp3 + Retrofit有关。

谁能调查一下,让我知道我在这里做错了什么?我已经在这个问题上工作了 2 周,但仍然没有找到解决方案。我阅读了与此问题相关的每个 stackoverflow 问题,但似乎没有任何效果。

最佳答案

好吧,这段代码工作正常,我发现我的主机在 keepAliveTimeout 上的限制为 5 秒,这就是为什么 KeepAlive 只工作 5 秒并且在连接关闭之后。除非我更改主机,否则无论我做什么代码都无法更改。

关于android - okHttp3保持 Activity 连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57457722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com