miller
发布于

快速发起100w http请求 Apache HttpAsyncClient

httpasyncclient 是 Apache 提供的一个 HTTP 的工具包,主要提供了 reactor 的 io 非阻塞模型,实现了异步发送 http 请求的功能。

用pool概念的话,每个线程是阻塞等待结果的 。

类比: jedis vs redisRestTemplate. nodejs的高效网络模型

概念解释: https://zhuanlan.zhihu.com/p/373732960

这种方式简单好用,但是在高并发场景下有缺陷。在单线程环境下,程序发送http请求是串行的,也就是第一个请求未完成的情况下,第二个请求发不出去,就像一条单行车道,车子只能一辆一辆的过。 为此我们会引入多线程提高并发性,然而多线程对并发发送http请求的提升也是有限的,比如8个线程同时只能发送8个请求,假如每个请求从发送到得到结果的时间是1秒,那么8个线程每秒钟也只能发送8个请求,而线程不能无线多开,因此多线程并不能很好的解决客户端高并发发送请求的问题。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpasyncclient</artifactId>
    <version>4.1.4</version>
</dependency>

connectTimeout:建立 http 连接超时时间
soTimeout:http readTimeout 读取超时间
connectionRequestTimeout:从池中获取 http 连接超时时间
maxConnTotal:http 连接池总大小
maxConnPerRoute:单个 route 最大连接数(ps:route = host:port)

源码分析

浏览 (1200)
点赞
收藏
评论