了解URLConnection连接是否真的被合并了?

时间:2012-01-05 05:01:37

标签: java android

我正在为我的http客户端使用URLConnection。使用Wireshark,我可以看到设置https连接最多可能需要4秒钟。因此,如果可能,我想池连接以避免https设置时间。我的流程如下:

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设置,这让我认为连接并没有真正被重用(至少不是我的方式)希望)。通过Wireshark,我看到如下内容:

// 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

但是,如果我在<<< 5秒,看起来第二次运行时跳过了握手,我立即看到“应用程序数据”消息。我想我记得在某个地方读过URLConnection只能将连接集中在一起5秒钟。

所以我的问题:

  1. URLConnection可以按照我想要的方式实际汇集我的连接,因为后续连接可以跳过https握手(如果命中同一个域)?
  2. 如果可以实现上述目标,是否有办法增加连接保持合并的持续时间?我的应用程序不可能在5秒内完成http调用。
  3. 我知道HttpClient提供了一个池管理器来重用连接,但看起来比URLConnection更复杂。可以让我绕过#1& 2如果他们不能做我需要的事情?
  4. 谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用Keep-Alive标头属性来保留任何http连接。以下是关于Http Keep-alive Http Keep Alive

的文档

部分您可以做些什么来帮助Keep-Alive 提供您正在寻找的确切信息。在SO中快速搜索给了我另一个链接,就像你的问题一样。

SO disucssion link