2012-01-05 25 views
2

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

所以我的問題:

  1. 的URLConnection其實可以集中我的,我想要的方式連接,在隨後的連接可以跳過HTTPS握手(如果擊中同一個域)?
  2. 如果上述可行,有沒有辦法增加連接保持彙集的時間?我的應用程序不太可能在彼此的5秒鐘內完成http調用。
  3. 我知道HttpClient提供了一個池管理器來重用連接,但看起來比URLConnection更復雜。它可以讓我周圍#1 & 2,如果他們不會做我所需要的?

謝謝

+0

的[如何在Java做的URLConnection重用從連接池]可能的複製(https://stackoverflow.com/questions/8266488/how-does-urlconnection-in-java-reuses-the - 從池中連接) – rogerdpack 2017-11-01 21:57:00

回答

0

您可以使用保持活動標題屬性persisit任何HttpConnection的。這裏是關於Http Keep-alive的文檔Http Keep Alive

section 你能做些什麼來幫助Keep-Alive提供你正在尋找的確切信息。在SO的快速搜索給了我另一個鏈接,就像你的問題。

SO disucssion link

+0

嗨,HttpURLConnection文檔說默認情況下保持活着。您鏈接到的文檔沒有提及連接彙集多長時間(我相信這可能會因實現而有所不同)。有什麼辦法可以控制這個時間嗎?謝謝 – user291701 2012-01-05 14:48:46

+0

這是我所指的Android上的HttpURLConnection的文檔:http://developer.android.com/reference/java/net/HttpURLConnection.html – user291701 2012-01-05 14:50:15

+0

此外,這是我閱讀有關只彙集連接持續5秒鐘:http://www.java.net/node/656952「否則,超時只有5秒,之後套接字將不會被重用」。我不知道HttpClient是否具有相同的超時限制。不幸的是,你不能在HttpURLConnection中修改它,除非服務器返回一個超時值來讓它承認? – user291701 2012-01-05 14:54:19