【问题标题】:Does Apache HttpClient batch requests?Apache HttpClient 是否批处理请求?
【发布时间】:2015-12-24 07:55:29
【问题描述】:

Apache HttpClient 是否将请求批处理到同一服务器以减少往返时间?

【问题讨论】:

  • 据我所知,“批处理”不是 HTTP 1 或 1.1 术语。你能准确地说“批量请求”是什么意思吗? (HTTP 1.1 管道?连接保持活动/重用?/tools.ietf.org/id/draft-snell-http-batch-00.html?)
  • @Pinch 你检查了我插入“连接:保持活动”标题的答案吗?

标签: java apache-httpclient-4.x


【解决方案1】:

在 HTTP 方面没有称为批处理请求的术语。但是,如果您的意思是使用相同的 TCP 连接发送请求,从而避免每个请求的额外往返时间,则称为 keep-alive

在 HTTP1.1 中,默认是保持连接,所以你不需要做任何事情。服务器决定是否保持连接。

在 HTTP1.0 中,您必须添加 keep-alive 标头来请求保持连接处于活动状态。

这是 Apache HttpClient 插入 Connection: keep-alive 标头的示例。

HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get().setUri(SAMPLE_URL)
  .setHeader(HttpHeaders.CONNECTION, "keep-alive").build();
client.execute(request);

它的工作原理是这样的:当你发送一个 HTTP 请求时,你需要在服务器和你之间建立一个 TCP 连接。它需要一个往返时间,之后您可以发送您的请求。

发送请求后,有两个选项,关闭或不关闭 TCP 连接。如果您关闭 TCP 连接,服务器会释放分配给您的资源(对服务器有利),但是当您要发送另一个请求时,您需要打开一个新连接。如果您不关闭连接,您可以避免额外的 RTT,但是当连接打开时,其他用户无法使用服务器的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2023-02-09
    • 2013-03-20
    • 1970-01-01
    • 2014-08-25
    相关资源
    最近更新 更多