Giter Club home page Giter Club logo

Comments (4)

12932 avatar 12932 commented on September 1, 2024 2

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.

neonmoe avatar neonmoe commented on September 1, 2024

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.

w-flo avatar w-flo commented on September 1, 2024

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.

neonmoe avatar neonmoe commented on September 1, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.