httpクライアントにURLConnectionを使用しています。 Wiresharkを使用すると、https接続の設定に最大4秒かかります。したがって、できる限りhttpsのセットアップ時間を避けるために接続をプールしたいと思います。URLConnection接続が実際にプールされているかどうかを理解していますか?
上記の設定でpublic String work(String url) {
HttpURLConnection conn = (HttpURLConnection)(new URL(url)).openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String response = br.readResponseFromConnection();
conn.disconnect();
br.close();
return response;
}
public void onBtnClickTest() {
work("https://example.com/echo?param=abc");
}
、私は二回私のテスト]ボタンをクリックし、それは私が、接続が実際に再利用されていないと思わせる設定が各呼び出しのために行われているHTTPS、次のようになります。私の流れはこのようになります(少なくとも私が望んでいた方法ではない)。私は< 5秒のスパン以内に2回のテスト]ボタンをクリックすると、ハンドシェイクがセカンドランのためにスキップされているように見える、
// first click
Client Hello
Server Hello
Certificate, Server Hello Done
Client Key Exchange, Change Cipher Spec, Encrypted...
Encrypted Handshake Message...
Application Data
// second click, 20 seconds after my first click.
Client Hello
Server Hello
Certificate, Server Hello Done
Client Key Exchange, Change Cipher Spec, Encrypted...
Encrypted Handshake Message...
Application Data
しかし、私はすぐに参照してください。Wiresharkのを通して、私は次のようなものを参照してください"アプリケーションデータ"メッセージ。私はどこかでURLConnectionが接続を5秒間だけプールし続けることを覚えていると思います。
だから私の質問:
- は、URLConnectionのは、実際には(同じドメインを打つ場合)は、後続の接続でHTTPSハンドシェイクをスキップすることができ、私が望むように私の接続をプールすることはできますか?
- 上記が可能な場合は、接続がプールされている期間を長くする方法はありますか?私のアプリケーションは、互いに5秒以内にhttpコールを行うことはまずありません。
- 私は、HttpClientが接続を再利用するためのプールマネージャを提供していますが、URLConnectionよりも複雑に見えます。彼らは私が必要なことをしない場合、#1 & 2の周りに私を得ることができますか?
あなたがどんなでHTTPConnectionをpersisitするためにキープアライブヘッダーのプロパティを使用することができます
[JavaでのURLConnectionがプールから接続を再利用しない方法]の可能性のある重複(https://stackoverflow.com/questions/8266488/how-does-urlconnection-in-java-reuses-the -connection-from-the-pool) – rogerdpack