Comments (4)
I definitely think this is something that's important to have. Since the most expensive part of any request is the TLS handshake, it's a bit of a waste to perform this every request, especially on lower-end hardware where minreq is more appealing than other Rust http crates
from minreq.
They're dropped on response, by design. Minreq isn't really supposed to be extremely fast or efficient*, but minimal in code size (including dependencies).
* We'll take what we can get though, if you feel like you could very simply add a connection pool, feel free to make a PR. But I don't personally think it's worth it, I'd rather use another http client if I needed the speed.
from minreq.
I do believe a connection pool would be out of scope of the crate, but what about a persistent connection that is not pooled, but kept alive between requests? Like this:
// This should probably have a better name ([new_]persistent_connection()? minreq::Connection::new()?)
let mut connection = minreq::keepalive();
// The following line would keep the connection alive if the server suggests it through the relevant HTTP headers
let response = connection.get(url).send().unwrap();
// do some stuff or maybe not
// This would re-use the connection if it was kept alive and the URL refers to the same host, or re-connect if the connection could not be kept alive since the server didn't want to, and throw an error (or possibly disconnect and re-connect?) if it refers to a different host
let other_response = connection.post(url).send().unwrap();
// This would close the connection if it is still alive
drop(connection);
I suspect it would add a bit of complexity though, like tracking connection state, the timeout and request limits indicated by the "Keep-Alive" HTTP header, making sure requests are not getting sent to the wrong host if the previous connection is still alive, and so on. So maybe this is out of scope of the crate, too. I do like the idea though. Existing minreq::get()
etc. calls should be very simple to offer on top of this API.
Obviously, HTTP pipelining would not work when using a simple sync API like minreq is designed to offer, and an async API generally seems more fitting for pipelining. However, this simple "connection keep-alive" approach would reduce the number of expensive TLS handshakes when sending multiple requests to the same host in quick succession.
from minreq.
Yeah, I think that would work. There's already some accommodation for making multiple requests with one connection, for the redirection functionality.
from minreq.
Related Issues (20)
- Bug: 404 NOT FOUND !!! HOT 6
- Feature Request: compression support
- Ability to accept self-signed certificates HOT 1
- How to specify client cert for two-way SSL? HOT 1
- Make `with_headers` in `Request` struct
- 设置Host头错误 HOT 1
- no method named `json` HOT 2
- 要怎么 发送和读取 HTTP的协议版本 HOT 1
- How I can send files with minreq? :( HOT 1
- No field 'status_code' on type 'Result<Response, minreq::Error>' HOT 2
- 在DllMain里面调用send会卡死 HOT 2
- Help download speed very low HOT 5
- "This app is not available on your PC" when compiling for release HOT 4
- 能否支持http代理 HOT 2
- Syn v2 release breaking MSRV? HOT 1
- proxy env not work HOT 2
- add async support HOT 4
- migrate from `webpki` to `rustls-webpki` HOT 2
- Pinning deps in `Cargo.toml` HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from minreq.