如何使用 Jetty Client 根据请求获取连接所需的时间
How to get the time it took to connect on a request basis using Jetty Client
我想计算每个请求从请求开始到建立连接(TCP 连接建立)之间的时间。
我问过这个问题,但它是模棱两可的。
我查看了建议的答案,也许我误解了,但我知道 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()
它有效,但有更好的方法吗?
I want to compute per request the time between the begining of request and time connection is established (TCP connection establishment).
这里可能有误会
HTTP/1.1 和 HTTP/2 使用持久 TCP 连接。
一个 TCP 连接已创建,保持打开状态,并可重复用于许多请求。
例如,创建一个 TCP 连接,然后重复使用,比如 1067 个请求,然后仍然保持打开状态。
计算第 1067 个请求开始与首次建立连接之间的时间没有多大意义(或者我很想听到一个用例)。
我知道连接保持打开几天的情况。
我想计算每个请求从请求开始到建立连接(TCP 连接建立)之间的时间。
我问过这个问题
我查看了建议的答案,也许我误解了,但我知道 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()
它有效,但有更好的方法吗?
I want to compute per request the time between the begining of request and time connection is established (TCP connection establishment).
这里可能有误会
HTTP/1.1 和 HTTP/2 使用持久 TCP 连接。 一个 TCP 连接已创建,保持打开状态,并可重复用于许多请求。
例如,创建一个 TCP 连接,然后重复使用,比如 1067 个请求,然后仍然保持打开状态。
计算第 1067 个请求开始与首次建立连接之间的时间没有多大意义(或者我很想听到一个用例)。
我知道连接保持打开几天的情况。