我爲我的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