【问题标题】:How to get the bytesIn/bytesOut on a request basis using Jetty Client如何使用 Jetty 客户端根据请求获取 bytesIn/bytesOut
【发布时间】:2021-06-10 21:06:04
【问题描述】:

我正在使用 Jetty Client 11,并希望为每个请求计算发送/接收的字节数。

我正在使用高级 HttpClient 。 我已阅读此文档,但没有看到有关如何执行此操作的任何信息:

我看到有一种方法可以通过以下方式获取此信息:

        ConnectionStatistics connectionStatistics = new ConnectionStatistics();
        httpClient.addBean(connectionStatistics);

然后:

        Request request = httpClient.newRequest(uri)
                .version(HttpVersion.HTTP_2)
                .timeout(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
        request.send(listener);
        ConnectionStatistics connectionStatistics = httpClient.getBean(ConnectionStatistics.class);
        System.out.println(connectionStatistics.getSentBytes()+"/"+ connectionStatistics.getReceivedBytes());

而且我一定做错了什么,因为它甚至不能在全球范围内工作,它总是给出 0。

无论如何,我不知道如何根据请求使其工作。

编辑:

我试过@sbordet 答案:

httpClient.newRequest(...)
  .onRequestContent((req, buf) -> requestBytes.add(buf.remaining()))
  ...
  .onResponseContent((res, buf) -> responseBytes.add(buf.remaining()))
  ...
  send(...);

它可以很好地响应。 BUT 对于请求,我想测量发送的字节,它总是给出 0(注意我只有没有内容的获取)而我希望有原始大小(原始 HTTP 请求字节,包括标头大小...)

【问题讨论】:

    标签: java http jetty http2 jetty-9


    【解决方案1】:

    您可以使用Request.ContentListener 计算请求字节数,使用Response.ContentListener 计算响应字节数:

    httpClient.newRequest(...)
      .onRequestContent((req, buf) -> requestBytes.add(buf.remaining()))
      ...
      .onResponseContent((res, buf) -> responseBytes.add(buf.remaining()))
      ...
      send(...);
    

    【讨论】:

    • 谢谢,如果回复是gzip的,是解压前还是解压后?
    • 它适用于响应,但对于请求,我想测量发送的字节数,它总是给出 0(注意我只有没有内容的获取)而我希望有原始大小
    • 你好@sbordet,我用我的评论更新了我的问题,如果你能看看就好了。谢谢
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2011-03-07
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多