2017-10-25 19 views
0

열려있는 파일 문제로 인해 서버가 정지 한 채로 너무 많은 연결이 열려 있기 때문에.API 요청에 okhttp3을 사용하고 있습니다. 그러나 새로운 연결 풀이 생성 될 때마다 새로운 요청이 실행될 때

나는 새로운 객체에게 내가 GET 및 POST 방법에 대한 별도의 방법을 쓴 그 후 때마다

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

를 만드는 생성자가 있습니다. : 응답 조각 위치 또는 활동에 처리됩니다 "()는 response.code"에 따라 그 후

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.close()를 호출하고 있습니다.

이제 조각에서 비동기 클래스를 만들고 doInBackground 메서드에서이 GET 및 POST 메서드를 호출하면 응답은 같은 클래스의 onPostExecute 메서드에서 처리됩니다. 대신에 우리는 연결 풀을 다시 사용할 수 있습니다 항상 새 연결을 만드는이

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

처럼

.

따라서 서버 측에서 65535 카운트를 초과하지 않습니다.

답변

0

이 당신의 생성자에서 다음과 같이 수행

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

는 새로운 연결 문제를 해결할 것인가? –

+0

예, 항상 연결을 하나만 취합니다. 전체 코드가 필요하면 도움을 청하십시오 – Rajasekhar

+0

방금 ​​변경을 시도했습니다. 아직도 서버에서 새로운 요청이있을 때마다 연결이 설정되었음을 알 수 있습니다. 그래서 나는 그것에 대해 더 많이 이해할 필요가있다. –