我正在制作一个程序,以便通过任何网址获得响应时间......
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 .. plz有人帮助我! 我需要捕获从我的请求的最后一位到第一位响应的时间。
答案 0 :(得分:2)
简单地打开连接根本不需要任何时间。您需要实际从URL中获取内容以获得有意义的基准。您还将url.openConnection()
移动到基准测试循环的外,这有点奇怪。
所以改变你的循环,以便:
url.openConnection()
conn.getInputStream()
之后添加对conn.connect()
的来电。 InputStream
的内容 - 这可能没有必要,具体取决于您要衡量的内容HttpURLConnection
的JavaDoc,以正确理解这些方法的真正含义。答案 1 :(得分:1)
仅仅打开连接就没有太多的回应。
此外,由于您的连接已经打开,因此您对connect()
的呼叫很可能会被忽略 - 这就是您获得0时间的原因。来自URLConnection#connect()
javadoc:
如果在连接时调用
connect
方法 已经打开(由connected
表示 如果字段值为true
),则忽略该调用。
如果您想要实际检索回复,请抓取InputStream
(调用conn.getInputStream()
),然后阅读其中的所有内容。
答案 2 :(得分:0)
Java api表示在调用conn.connect()时会建立连接,但除非从连接中获取InputStream,否则不会建立连接。
connection.getInputStream()
答案 3 :(得分:0)
conn.connect()建立连接(TCP三次握手)但它没有“获取”URL上的内容。您可以使用Wireshark来验证这一点。
因此,请注意,使用此方法,您无法衡量在网址上接收内容的响应时间。