我为我的http客户端使用URLConnection。使用Wireshark,我可以看到设置一个https连接最多可能需要四秒钟。因此,如果可能的话,我想集中连接以避免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的设置是每个调用完成,这让我想到的连接是不是真的被重用(至少不是我希望的方式)。通过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秒。
所以我的问题:
- 的URLConnection其实可以集中我的,我想要的方式连接,在随后的连接可以跳过HTTPS握手(如果击中同一个域)?
- 如果上述可行,有没有办法增加连接保持汇集的时间?我的应用程序不太可能在彼此的5秒钟内完成http调用。
- 我知道HttpClient提供了一个池管理器来重用连接,但看起来比URLConnection更复杂。它可以让我周围#1 & 2,如果他们不会做我所需要的?
谢谢
的[如何在Java做的URLConnection重用从连接池]可能的复制(https://stackoverflow.com/questions/8266488/how-does-urlconnection-in-java-reuses-the - 从池中连接) – rogerdpack 2017-11-01 21:57:00