AsyncHttpClient is an asynchronous, non-blocking HTTP and WebSocket client for the JVM built on top of Netty.
The tool addresses the need for high-performance HTTP communication in Java applications by providing non-blocking I/O through an asynchronous API. It supports HTTP/1.1, HTTP/2 with multiplexing enabled by default over TLS, and WebSocket protocols. Requests are executed through a fluent DSL and return either ListenableFuture or CompletableFuture for handling responses asynchronously. The tool handles connection pooling, keep-alive, automatic compression decompression in multiple formats, and cookie management according to RFC 6265.
Developers should adopt this tool when building JVM applications that require efficient concurrent HTTP communication without blocking threads. It suits projects making many simultaneous requests or maintaining long-lived connections. The tool requires Java 11 or later. For lower-latency I/O on Linux, optional native transports including Epoll, KQueue, and io_uring can be added as dependencies. The README emphasizes that AsyncHttpClient instances should be long-lived and shared rather than created per request, as repeated instantiation degrades performance through unnecessary thread pool and connection pool creation. Authentication options include Basic, Digest, NTLM, SPNEGO/Kerberos, and SCRAM-SHA-256. Proxy support covers HTTP, SOCKS4, and SOCKS5 with CONNECT tunneling.
The project maintains active development with regular commits addressing bug fixes and feature enhancements. Pull requests receive timely review and feedback from maintainers. The codebase shows consistent attention to performance optimization and protocol compliance, particularly around HTTP/2 multiplexing and connection handling. Issue discussions demonstrate engagement with user concerns and willingness to address edge cases in real-world usage scenarios.