Expand description
§Concuring
Note: This library is a work in progress and is not yet suitable for production use.
concuring is a synchronous, concurrent HTTP client that uses a single blocking thread.
§Design and Motivation
The primary goal of this library is to enable concurrent HTTP requests from a synchronous Rust application without pulling in an entire asynchronous runtime like tokio or async-std.
While async provides a powerful model for concurrency, it can be “viral,” often requiring significant parts of an application to be written in an async-aware style. For applications that are primarily synchronous, introducing async for networking can add significant complexity and binary size.
concuring offers a different trade-off. It uses the Linux io-uring interface to perform asynchronous I/O operations in the kernel, while presenting a simple, blocking API to your application. This allows you to submit multiple requests and wait for them to complete concurrently, all from a single thread, keeping your application’s architecture synchronous and simple.
§Trade-offs
- Linux Only: Relies on
io-uring, which is a Linux-specific feature. - Single-Threaded Concurrency: Concurrency is handled by the kernel, but all application-level logic runs on the one thread that owns the
Concuringclient. This is not multi-threaded parallelism.
§Roadmap
- HTTP GET
- Chunked responses
- Connection pooling
- TLS
Re-exports§
pub use concuring::Concuring;pub use request::Request;pub use request::RequestBuilder;