This repository was archived by the owner on Apr 8, 2020. It is now read-only.
Allow proxy middleware to abort long running connections. #914
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The conditional proxy middleware that is used for connecting to the webpack dev server was leaving lingering connections when proxying long-running HTTP requests like those used for hot reloading.
This was happening because the
CancellationTokenSource
which lives on theHttpContext
was never getting called after the initialSendAsync
which completes after headers are sent.The fix is simply to ensure that we respect the cancellation token when copying from the upstream response.
Note: I noticed this because when using .Net 4.6 plus System.Net.Http >= 4.3.1, you can only have 2 concurrent
HttpClient
requests active at a time because this change: dotnet/corefx#15036 uses theHttpClientHandler.MaxConnectionsPerServer
with a default of 2. What was happening was that if I reloaded the page once or twice the hot module reloading wouldn't connect to webpack because it wouldn't let any more connections through because there were a couple lingering threads. It also might be worth changingHttpClientHandler.MaxConnectionsPerServer
to something higher because even with this change the connections don't close immediately so several quick reloads can get you in the same position. Picking that default concurrency was out of scope for this PR though, I felt.