当前位置:  开发笔记 > 编程语言 > 正文

HttpAsyncClient 4如何工作?

如何解决《HttpAsyncClient4如何工作?》经验,为你挑选了1个好方法。

在以前的版本中,HttpClient目标主机已设置为客户端本身。在最新版本(对于HttpAsyncClient4.1.1)中,每次执行请求时,主机都设置为HttpRequestHttpGetHttpPost等等。)。

我想使用持久连接,所以我使用HttpAsyncClient。我这样创建和使用它:

CloseableHttpAsyncClient client = HttpAsyncClients.createDefault();
client.start();
List> responses = new ArrayList<>();
for (int i = 0; i < 10; i++)
{
    HttpGet get = new HttpGet("https://google.com/");
    responses.add(client.execute(get, null));
}
for (Future response : responses) {
    response.get(); //wait for the response
}

如我所测试,它的工作速度比平常更快HttpClient(如果我执行所有请求,然后等待所有响应)。

但是我无法完全了解它是如何工作的。https://google.com/建立了多少个连接?如果我使用client一台主机,然后再使用另一台主机会怎样?(正如我测试的那样,响应可以以任何顺序进行,因此我想至少有2个并行连接)。HttpAsyncClients.createDefault()和之间有什么区别HttpAsyncClients.createPipelining()

谢谢!



1> ok2c..:

默认情况下,根据RFC 2616规范,HttpAsyncClient仅允许两个并发连接到同一主机。此限制与I / O反应器内部使用的I / O调度线程的数量无关。

上面的代码最多将创建两个传出连接。

HTTP消息管道化本身与连接持久性无关,尽管管道化请求执行暗含了持久性连接的使用。

HTTP流水线是关于消息排序的。管道模式下的HttpAsyncClient可以发送多个请求,而无需等待每个响应。

默认模式:

C -> request1 -> S
C <- response1 <- S
C -> request2 -> S
C <- response2 <- S

流水线模式:

C -> request1 -> S
C -> request2 -> S
C <- response1 <- S
C <- response2 <- S

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有