2017-10-25 9 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

はい、接続は常に1つだけになります。あなたは完全なコードが必要な場合は私が助けることができる質問 – Rajasekhar

+0

私は変更を試みた。それでも、サーバーでは、各要求に対して新しい接続が確立されていることがわかります。だから私はそれについてもっと理解する必要があります。 –

関連する問題