由于打开的连接太多,几天后服务器因打开文件问题而挂起。
我有构造函数,每次都会创建一个新对象
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 计数。