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.
Overview
When closing a WebSocket connection, e.g. by closing a web tab, the router did not immediately detect that the connection has been closed.
The connection would close when the keep-alive ping-pong check failed, but the delay could cause the number of concurrent connections and active streams to accumulate for short periods.
This bubbles the WebSocket
close
event through the WebSocket Duplex connection and router endpoint handlers.Thanks @rkistner for finding the issue and providing a fix.
Testing
This was tested locally with web and React Native. See screenshots below where the
STREAM
log duration is below the keep-alive period of 30_000ms.The close unit test was updated to ensure that the cancel event is called correctly. Oddly enough this extended test actually would pass with the previous code - the bug is only reproducible with an actual connection.