2012-01-05 30 views
2

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秒間だけプールし続けることを覚えていると思います。

だから私の質問:

  1. は、URLConnectionのは、実際には(同じドメインを打つ場合)は、後続の接続でHTTPSハンドシェイクをスキップすることができ、私が望むように私の接続をプールすることはできますか?
  2. 上記が可能な場合は、接続がプールされている期間を長くする方法はありますか?私のアプリケーションは、互いに5秒以内にhttpコールを行うことはまずありません。
  3. 私は、HttpClientが接続を再利用するためのプールマネージャを提供していますが、URLConnectionよりも複雑に見えます。彼らは私が必要なことをしない場合、#1 & 2の周りに私を得ることができますか?

あなたがどんなでHTTPConnectionをpersisitするためにキープアライブヘッダーのプロパティを使用することができます

+0

[JavaでのURLConnectionがプールから接続を再利用しない方法]の可能性のある重複(https://stackoverflow.com/questions/8266488/how-does-urlconnection-in-java-reuses-the -connection-from-the-pool) – rogerdpack

答えて

0

ありがとうございます。ここにはHttpキープアライブのドキュメントがありますHttp Keep Alive

セクションキープアライブのために何ができるのですか?はあなたが探している情報を正確に示します。 SOのクイック検索では、あなたの質問とまったく同じ別のリンクが表示されました。

SO disucssion link

+0

こんにちは、HttpURLConnectionドキュメントでは、Keep-Aliveがデフォルトでオンになっています。リンク先のドキュメントには、接続がプールされている期間は記載されていません(実装ごとに異なる可能性があります)。その期間を管理する方法はありますか?ありがとうございます – user291701

+0

これは私が参照しているアンドロイドのHttpURLConnectionのためのドキュメントです:http://developer.android.com/reference/java/net/HttpURLConnection.html – user291701

+0

これは私がプールされている接続について読んだところです5秒間:http://www.java.net/node/656952 "それ以外の場合、タイムアウトはわずか5秒です。その後、ソケットは再使用されません"。私はHttpClientが同じタイムアウト制限を持っているのだろうかと思います。残念ながら、サーバーがタイムアウト値を返すまでHttpURLConnectionの値を変更することはできないようです。 – user291701

関連する問題