Java 如何获得使用Jetty客户端按请求连接所需的时间
我想计算每个请求的从开始请求到建立连接的时间(TCP连接建立)之间的时间 我问了这个问题,但模棱两可 我看了一下提议的答案,也许我误解了,但我理解这种联系。侦听器至少在全球范围内工作(总连接时间) 因此,我尝试了基于SocketAddressResolver的方法:Java 如何获得使用Jetty客户端按请求连接所需的时间,java,http,jetty,http2,jetty-9,Java,Http,Jetty,Http2,Jetty 9,我想计算每个请求的从开始请求到建立连接的时间(TCP连接建立)之间的时间 我问了这个问题,但模棱两可 我看了一下提议的答案,也许我误解了,但我理解这种联系。侦听器至少在全球范围内工作(总连接时间) 因此,我尝试了基于SocketAddressResolver的方法: private static class CustomSocketAddressResolver implements SocketAddressResolver { private StopWatch st
private static class CustomSocketAddressResolver implements SocketAddressResolver {
private StopWatch stopWatch = new StopWatch();
private SocketAddressResolver adaptee;
public CustomSocketAddressResolver(SocketAddressResolver adaptee) {
this.adaptee = adaptee;
}
public long getConnectTime() {
return stopWatch.getTime();
}
@Override
public void resolve(String host, int port, Promise<List<InetSocketAddress>> promise) {
stopWatch.reset();
stopWatch.start();
adaptee.resolve(host, port, new Promise<List<InetSocketAddress>>() {
@Override
public void succeeded(List<InetSocketAddress> result) {
// Add as first address an invalid address so that we test
// that the connect operation iterates over the addresses.
stopWatch.stop();
promise.succeeded(result);
}
@Override
public void failed(Throwable x) {
stopWatch.stop();
promise.failed(x);
}
});
}
}
它是有效的,但有更好的方法吗
我想计算每个请求从开始请求到建立连接(TCP连接建立)之间的时间
也许这里有误会
HTTP/1.1和HTTP/2使用持久TCP连接。
TCP连接被创建、保持打开状态,并对许多请求重复使用
例如,创建一个TCP连接,然后重新用于(比如)1067个请求,然后仍然保持打开状态
计算从1067请求开始到连接第一次建立的时间之间的时间是没有多大意义的(或者我想听听这个用例)
我知道有些情况下,连接会保持开放数天。如果连接时间少于1ms,或者如果时钟精度低于连接时间,该怎么办?[回到Windows XP时代,如果精度达到50-100毫秒,你就很幸运了]。您好,在这种情况下,你有什么建议?那么,如果精度这么小,这是一个问题吗?您是否正在优化一些不需要优化的内容(请参阅答案)。您好,这将用于性能测试目的。是的,我知道您所描述的,当为同一虚拟用户打开连接时,所做请求的连接时间为0。我的代码是否与我描述的目的相符?有更好/更简单的方法吗?非常感谢您的帮助。通常,测量连接时间与大多数对请求时间感兴趣的基准测试无关。只需测量响应时间,请参见示例:。好的,谢谢您的提示。问题中描述的方法是否仍然有效(根据您的另一个答案?)?问题中代码段中的方法不是线程安全的。事实上,我认为同步秒表访问不够正确,因为解析调用可能运行1个线程,而CustomSocketAddressResolver#getConnectTime调用另一个线程。每个请求是否有某种上下文,我可以用来存储每次调用的信息?
((CustomSocketAddressResolver) httpClient.getSocketAddressResolver()).getConnectTime()