Java 如何获得使用Jetty客户端按请求连接所需的时间

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

我想计算每个请求的从开始请求到建立连接的时间(TCP连接建立)之间的时间

我问了这个问题,但模棱两可

我看了一下提议的答案,也许我误解了,但我理解这种联系。侦听器至少在全球范围内工作(总连接时间)

因此,我尝试了基于SocketAddressResolver的方法:

    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()