代码之家  ›  专栏  ›  技术社区  ›  hotzst

Apache httpclient连接配置

  •  1
  • hotzst  · 技术社区  · 6 年前

    我正在尝试设置 HttpClient 通过 HttpClientBuilder . 我也看了一下 HttpClientConnectionManager 在这里,混乱开始了。

    在ConnectionManager上,或者更确切地说, PoolingHttpClientConnectionManager 有一些方法可以:

    • 关闭过期的连接
    • 关闭空闲连接

    什么时候连接被认为是过期的?
    什么时候闲置?
    当来自池的连接关闭时会发生什么?是否确保在需要时重新创建连接?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Sofo Gial    6 年前

    根据: https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

    httpclient尝试通过测试 连接“过时”,因为它已关闭而不再有效 在服务器端,在使用连接执行 HTTP请求。陈旧的连接检查不是100%可靠。这个 唯一不涉及每个套接字一个线程的可行解决方案 空闲连接模型是一个专用的监视线程,用于逐出 由于长时间的 不活动。监视线程可以定期调用 clientConnectionManager closeExpiredConnections()方法关闭所有 过期的连接并将关闭的连接从池中逐出。它还可以选择调用clientConnectionManager closeIdleConnections()方法来关闭在给定时间段内处于空闲状态的所有连接。

    过期连接和空闲连接的区别在于服务器端的过期连接已关闭,而服务器端的空闲连接不一定已关闭,但在一段时间内处于空闲状态。当连接关闭时,它在要使用的池中再次可用。

        2
  •  0
  •   Roman Vottner    6 年前

    HTTP是基于TCP的,它管理包以正确的顺序发送和接收,并在包中途丢失时请求重新传输。TCP连接是用包含以下内容的TCP握手启动的 SYN , SYN-ACK ACK 当它以一个 FIN , ACK-FIN ACK 从这张图片中可以看到的系列 Wikipedia enter image description here

    虽然HTTP是一种请求-响应协议,但是打开和关闭连接的开销非常大,因此HTTP/1.1允许重用现有的连接。带头 Connection: keep-alive 即,告诉客户机(即浏览器)保持与服务器的连接打开。一个服务器可以同时拥有几万个开放连接。为了避免耗尽服务器的资源,通常会及时限制连接。通过套接字超时,空闲连接或具有某些连接问题(中断Internet访问等)的连接将在服务器预先定义的时间后自动关闭。

    许多HTTP实现,如ApacheHTTP客户机4.4及更高版本,只在连接即将使用时检查连接的状态。

    在4.4版中更改了对过时连接的处理。以前,代码会在重新使用之前默认检查每个连接。代码现在只检查自上次使用连接以来经过的时间是否超过了设置的超时。默认超时设置为2000毫秒( Source )

    因此,如果一个连接可能在一段时间内没有被使用,客户端可能没有读取 鳍鳍 因此,当连接在一段时间前已经被服务器关闭时,仍然认为它是打开的。这种连接是过期的,通常称为半闭合。因此,可由游泳池收集。

    请注意,如果您发送的请求包括 Connection: close HTTP头,连接应该在客户端收到响应后立即关闭。

    可以通过以下方式检查打开连接的状态: netstat 它应该出现在大多数现代操作系统中。我最近不得不检查我们的一个HTTP客户机,它是通过一个没有传播 Connection: Close 割台正常,因此导致大量半封闭连接。