【发布时间】:2021-06-10 23:01:30
【问题描述】:
我想计算每个请求从请求开始到建立连接(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()
它有效,但有更好的方法吗?
【问题讨论】:
-
如果时间少于 1 毫秒,或者时钟精度小于连接时间怎么办? [回到 Windows XP 时代,如果你有 50-100 毫秒的精度,那你就很幸运了]。
-
您好,在这种情况下您有什么建议?
-
那么小有问题吗?您是否在优化不需要优化的东西(见答案)。
标签: java http jetty http2 jetty-9