如何获取使用 Jetty Client 连接所需的时间
How to get the time it took to connect using Jetty Client
我正在使用 Jetty Client 11 并想计算建立连接所需的时间。
我正在使用高级 HttpClient。
我已阅读此文档,但没有看到有关如何执行此操作的任何信息:
我猜这个信息在 Connection#onOpen 中,但我不知道如何插入我的代码
ClientConnector connector = new ClientConnector();
connector.setConnectTimeout(Duration.ofSeconds(1));
connector.setIdleTimeout(Duration.ofSeconds(1));
ClientConnectionFactory.Info http1 = HttpClientConnectionFactory.HTTP11;
HTTP2Client http2Client = new HTTP2Client(connector);
ClientConnectionFactoryOverHTTP2.HTTP2 http2 = new
ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
HttpClientTransportDynamic transport = new HttpClientTransportDynamic(connector, http2, http1);
HttpClient httpclient = new HttpClient(transport);
QueuedThreadPool threadPool = new QueuedThreadPool(3);
threadPool.setName("test");
httpClient.setExecutor(threadPool);
httpClient.start();
这取决于你所说的“建立连接”是什么意思。
如果您的意思只是建立 TCP 连接,您可能需要 wrap/subclass SocketAddressResolver
和 wrap/override resolve(host, port, promise)
.
调用resolve()
时可以轻松保存开始时间,并记录promise完成时的停止时间。
或者,您可以将 Connection.Listener
作为 bean 添加到 HttpClient
:
HttpClient httpclient = new HttpClient(transport);
httpClient.addBean(new Connection.Listener() {
@Override
public void onOpened(Connection connection) {
...
}
});
如果你的意思是 TCP 连接建立 + TLS 握手,你可以使用一个 SslHandshakeListener
来知道 TLS 握手何时完成,并将其添加为一个 bean:
HttpClient httpclient = new HttpClient(transport);
httpClient.addBean(new SslHandshakeListener() {
@Override
public void handshakeSucceeded(Event event) {
...
}
});
另请查看 org.eclipse.jetty.io.ConnectionStatistics
和 IncludeExcludeConnectionStatistics
实用程序 类,它记录了有关连接的大量统计信息。
我正在使用 Jetty Client 11 并想计算建立连接所需的时间。
我正在使用高级 HttpClient。 我已阅读此文档,但没有看到有关如何执行此操作的任何信息:
我猜这个信息在 Connection#onOpen 中,但我不知道如何插入我的代码
ClientConnector connector = new ClientConnector();
connector.setConnectTimeout(Duration.ofSeconds(1));
connector.setIdleTimeout(Duration.ofSeconds(1));
ClientConnectionFactory.Info http1 = HttpClientConnectionFactory.HTTP11;
HTTP2Client http2Client = new HTTP2Client(connector);
ClientConnectionFactoryOverHTTP2.HTTP2 http2 = new
ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
HttpClientTransportDynamic transport = new HttpClientTransportDynamic(connector, http2, http1);
HttpClient httpclient = new HttpClient(transport);
QueuedThreadPool threadPool = new QueuedThreadPool(3);
threadPool.setName("test");
httpClient.setExecutor(threadPool);
httpClient.start();
这取决于你所说的“建立连接”是什么意思。
如果您的意思只是建立 TCP 连接,您可能需要 wrap/subclass SocketAddressResolver
和 wrap/override resolve(host, port, promise)
.
调用resolve()
时可以轻松保存开始时间,并记录promise完成时的停止时间。
或者,您可以将 Connection.Listener
作为 bean 添加到 HttpClient
:
HttpClient httpclient = new HttpClient(transport);
httpClient.addBean(new Connection.Listener() {
@Override
public void onOpened(Connection connection) {
...
}
});
如果你的意思是 TCP 连接建立 + TLS 握手,你可以使用一个 SslHandshakeListener
来知道 TLS 握手何时完成,并将其添加为一个 bean:
HttpClient httpclient = new HttpClient(transport);
httpClient.addBean(new SslHandshakeListener() {
@Override
public void handshakeSucceeded(Event event) {
...
}
});
另请查看 org.eclipse.jetty.io.ConnectionStatistics
和 IncludeExcludeConnectionStatistics
实用程序 类,它记录了有关连接的大量统计信息。