-
-
Notifications
You must be signed in to change notification settings - Fork 614
Default pipelining to maxConcurrentStreams with allowH2 #4143
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I'm not sure this is a bug per-se, rather an improvement in the way we setup H2 (as Adding a new option Would you like to send a PR for that? |
I started dabbing at that and I think it would make things confusing.
Assume we'd want to sustain 1_000 concurrent requests. I would then open:
The question that comes to mind: why would a user need to configure Even if someone would be afraid of the peer changing
The only difference now is that |
Indeed, that's a good point; Agree with you, Sadly this will impose a breaking change, we can attempt to keep warnings over that and state that we will honor mostly Feel free to open a PR so we can iterate over it. |
For H2 sessions pipelining is misleading and is a concept of HTTP/1.1. This makes use of `maxConcurrentStreams` parameter to be equivalent of what H2 calls multiplexing. It makes sure that clients do not have to change `pipelining` in order to achieve multiplexing over a H2 stream. Closes nodejs#4143.
Started #4158. |
Bug Description
The recent H2CClient work (#4118) does it well. If
pipelining
is not set, it defaults tomaxConcurrentStreams
which makes sense. This however, is not a case when a regular Client (or its descendent Agent) is in use.Being on a HTTP/2 connection is still limited to either the default (1) or requires manual setup.
Manual setup is inconvenient and confusing. Pipelining is a HTTP/1.1 concept.
Docs say nothing about adjust pipelining when using HTTP/2 multiplexing and actually link to the HTTP/1.1 RFC under pipelining.
Reproducible By
sever.js
Then run the server:
And load test it. Run the same with and without
pipelining
set.hey -n 15000 -c 100 -q 300 -t "1" http://localhost:3000
Expected Behavior
Same performance with or without pipelining set.
Environment
Node 23, macOS 15.3, but it's not platform related, it seems.
Additional context
Should #2750 make HTTP/2 on by default, users will not benefit from HTTP/2 at all - it might behave pretty much the same as HTTP/1.1 connections with keep-alive + some TLS overhead...
The text was updated successfully, but these errors were encountered: