Skip to content

Feature Request: Tracking # of HTTP requests made on the current TCP connection #266

Open

Description

@mohamedhafez

For persistent connections, some servers are configured to reset them after a certain number of HTTP requests. Net::HTTP::Persistent added a max_requests variable to preemptively close your connection after a certain amount of HTTP requests are made for this reason in drbrain/net-http-persistent#42

However, without changes to Net::HTTP, Net::HTTP::Persistent can only track how many times it makes a request of it's Net::HTTP instance. But this isn't perfect: begin_transport can re-connect on a new TCP connection if it finds the socket was closed some time after the last time you used it, like if the server closed the connection, and Net::HTTP::Persistent will never know there's a new TCP connection, and that it should therefor reset its count of requests over the TCP connection back to 0.

My suggestion is that we make an instance variable here in Net::HTTP called @num_requests_on_connection, that gets set to 0 at the end of connect, and is incremented at the end of begin_transport after the reconnection attempts. I believe that way we could get an accurate count!

@raggi @drbrain

Activity

  1. mohamedhafez commented on Dec 29, 2025

    @mohamedhafez
    ContributorAuthor

    Would be happy to send in a PR with tests if maintainers could comment that they would accept one!

    (For context, my service is hitting a frequently overloaded 3rd party API server, and doing what we can from our end to minimize the number of the connections to it we need has already improved the situation greatly, and would love to get this optimized as well. Getting the 3rd party to increase the resources or tune their connection settings is unfortunately not an option)

  2. mohamedhafez commented on Dec 29, 2025

    @mohamedhafez
    ContributorAuthor

    I'd love to be able to track the age of the connection in a similar way as well. Some servers let you specify a max age for a TCP socket, not just an idle keepalive time, and would love to be able to see if we are hitting that in logs. Again, happy to do the PR myself if it would be accepted!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions