微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Jetty Client 根据请求获取连接所需的时间

如何解决如何使用 Jetty Client 根据请求获取连接所需的时间

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

我问了这个问题 question 但它含糊不清。

我查看了建议的答案,也许我误解了,但我明白 Connection.Listener 至少在全球范围内工作(总连接时间)

所以我尝试了基于 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);
                }
            });
        }
    }

然后我可以像这样获得连接时间:

 ((CustomSocketAddressResolver) httpClient.getSocketAddressResolver()).getConnectTime()

它有效,但有更好的方法吗?

解决方法

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

也许这里有误会。

HTTP/1.1 和 HTTP/2 使用持久性 TCP 连接。 一个 TCP 连接被创建,保持打开状态,并为许多请求重复使用。

例如,创建一个 TCP 连接,然后将其重用于 1067 个请求,然后仍然保持打开状态。

计算从第 1067 个请求开始到第一次建立连接之间的时间没有多大意义(或者我很想听到一个用例)。

我知道连接保持开放数天的情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。