【问题标题】:I'm using okhttp3 for API request. But when ever a new request is fired each time new connection pool is created我正在使用 okhttp3 进行 API 请求。但是,每次创建新连接池时都会触发一个新请求
【发布时间】:2017-10-25 06:13:59
【问题描述】:

由于打开的连接过多,几天后服务器因打开文件问题而挂起。

我有构造函数,每次都会创建一个新对象

OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslContext.getSocketFactory())
                                .build();

之后我为 GET 和 POST 方法编写了一个单独的方法。

Response response = null;

Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
requestBuilder.header("appId", BuildConfig.APPLICATION_ID);
requestBuilder.header("appVersion", BuildConfig.VERSION_NAME);
requestBuilder.header("deviceId", UserPrefs.getDeviceID());
requestBuilder.header("accessToken", UserPrefs.getAccessToken());
requestBuilder.header("versionCode", String.valueOf(BuildConfig.VERSION_CODE));
requestBuilder.header("securityCounter", UserPrefs.getSecurityToken());

Request okHttpRequest = requestBuilder.build();

OkHttpClient.Builder b = new OkHttpClient.Builder();
                b.readTimeout(65, TimeUnit.SECONDS);
                b.writeTimeout(65, TimeUnit.SECONDS);
                b.connectTimeout(65, TimeUnit.SECONDS);
                client = b.build();

                response = client.newCall(okHttpRequest).execute();

之后基于“response.code()”的响应在 Fragment 或 Activity 中处理。最后,

我正在调用 response.close()。

现在在 Fragment 中,我创建了一个异步类并在 doInBackground 方法中调用此 GET 和 POST 方法,并在同一类的 onPostExecute 方法中处理响应。

喜欢这个

 OkHttpClientAPI okHttpClientAPI = new OkHttpClientAPI(LoginActivity.this);
 response = okHttpClientAPI.doPostRequest(url, formBody, LoginActivity.this);

我们可以重复使用连接池,而不是总是创建新连接。

所以不会超过服务器端的 65535 计数。

【问题讨论】:

    标签: android okhttp3 okhttp connection-pool


    【解决方案1】:

    在你的构造函数中这样做

        OkHttpClient okHttpClient; // global variable 
         public YourConstructor() {
                if (okHttpClient == null) {
                    okHttpClient = new OkHttpClient();
                }
            }
    

    【讨论】:

    • 是的,它总是只需要一个连接。如果你需要完整的代码问我可以帮忙
    • 我刚刚尝试了更改。我仍然可以在服务器中看到为每个请求建立了新连接。所以我需要更多地了解它。
    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多