2012-01-05 40 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