0

我正在制作一个程序来通过任何网址获取响应时间...

 HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 for(int i=0; i<20; i++ ) {
       long starTime = System.currentTimeMillis();       
       conn.connect();

       long elasedTime = System.currentTimeMillis() - starTime;
       System.out.println(elasedTime);

       conn.disconnect();
  }

但大多数时候它给我的输出结果为0 ..请有人帮帮我!我需要捕获从我的请求的最后一点到响应的第一位的时间。

4

4 回答 4

2

简单地打开连接根本不需要任何时间。您需要实际从 URL 获取内容以获得有意义的基准。您还移到url.openConnection()了基准循环之外,这有点奇怪。

所以改变你的循环,以便:

  1. url.openConnection()在循环内移动
  2. conn.getInputStream()conn.connect(). _
  3. (也许)阅读内容InputStream- 这可能不是必需的,具体取决于您要测量的内容
  4. 最重要的是,阅读 JavaDocHttpURLConnection以正确理解这些方法的真正作用。
于 2012-05-16T09:03:17.493 回答
1

仅仅打开一个连接就不会得到太多的响应。

此外,由于您的连接已经打开,您的呼叫connect()很可能被忽略 - 这就是您获得 0 时间的原因。从URLConnection#connect()javadoc:

如果在connect连接已经打开时调用该方法(由connected 具有 value 的字段指示true),则忽略该调用。

如果您想实际检索响应,请获取InputStream(call conn.getInputStream()),然后读取其中的所有内容。

于 2012-05-16T09:08:37.213 回答
0

conn.connect() 建立连接(TCP 三向握手),但它不会“获取”URL 处的内容。您可以使用 Wireshark 来验证这一点。

所以要知道,使用这种方法,您不会测量在 URL 处接收内容的响应时间。

于 2014-10-30T21:09:55.470 回答
0

Java api 表示当您调用 conn.connect() 时建立连接,但除非您从连接中获取 InputStream,否则不会建立连接。

connection.getInputStream()
于 2012-05-16T09:04:50.617 回答