fix: pingTimeout is not reset while receiving messages #706
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.
Note: the
engine.io.js
file is the generated output ofmake engine.io.js
, and should not be manually modified.The kind of change this PR does introduce
Current behaviour
In the case where a client is has a slow connection it is possible for the pingTimeout to trigger while messages
are still being transferred from the server. My understanding is that this is because the ping messages are sent "in-band" with all the other messages which means they can essentially become blocking in the queue behind multiple
other messages.
New behaviour
This PR makes the assumption that if the client is receiving messages, the link must be ok, so will reset the ping
timeout for any message that arrives at the client. This means that ping timeouts will not occur as long
as a single message can be transferred within the configured ping timeout + ping interval.
It appears the server side implementation of engine.io also uses a similar mechanism.
https://github.com/socketio/engine.io/blob/main/lib/socket.ts#L147
Other information (e.g. related issues)