Repository navigation
socket.io-client 4.8.0 automatic reconnect is not working #5197
Copy link
Copy link
Open
Labels
Description
Describe the bug
I have a client which connects to server
If the server stops and restarts the connect event is not called anymore
In version 4.7.5 the connect event was called when the server restarts and opens the websocket
Socket.IO client version: 4.8.0
Expected behavior
The connect event should be called automatically if the server restarts and opens the websocket
Platform:
NodeJs 16 on Ubuntu 20.04
and also in Chromium 128.0.6613.119
Additional context
On 4.7.5 I get multiple times this connect_error event until it reconnects.
TransportError: xhr poll error
at Polling.onError (/home/sruetzler/data/workspace/gitlab/target/installer/rauc-api-client/node_modules/engine.io-client/build/cjs/transport.js:47:37)
at Request.<anonymous> (/home/sruetzler/data/workspace/gitlab/target/installer/rauc-api-client/node_modules/engine.io-client/build/cjs/transports/polling.js:238:18)
at Request.Emitter.emit (/home/sruetzler/data/workspace/gitlab/target/installer/rauc-api-client/node_modules/@socket.io/component-emitter/lib/cjs/index.js:143:20)
at Request.onError (/home/sruetzler/data/workspace/gitlab/target/installer/rauc-api-client/node_modules/engine.io-client/build/cjs/transports/polling.js:343:14)
at Timeout._onTimeout (/home/sruetzler/data/workspace/gitlab/target/installer/rauc-api-client/node_modules/engine.io-client/build/cjs/transports/polling.js:316:30)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7) {
description: 0,
context: XMLHttpRequest {
UNSENT: 0,
OPENED: 1,
HEADERS_RECEIVED: 2,
LOADING: 3,
DONE: 4,
readyState: 4,
onreadystatechange: [Function (anonymous)],
responseText: 'Error: connect ECONNREFUSED 192.168.70.132:443\n' +
' at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16)',
responseXML: '',
status: 0,
statusText: Error: connect ECONNREFUSED 192.168.70.132:443
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '192.168.70.132',
port: 443
},
open: [Function (anonymous)],
setDisableHeaderCheck: [Function (anonymous)],
setRequestHeader: [Function (anonymous)],
getResponseHeader: [Function (anonymous)],
getAllResponseHeaders: [Function (anonymous)],
getRequestHeader: [Function (anonymous)],
send: [Function (anonymous)],
handleError: [Function (anonymous)],
abort: [Function (anonymous)],
addEventListener: [Function (anonymous)],
removeEventListener: [Function (anonymous)],
dispatchEvent: [Function (anonymous)]
},
type: 'TransportError'
}
on 4.8.0 I get this errror once and after that I get this endless
No transports available
Reactions are currently unavailable
Activity
FredrikAugust commentedon Sep 30, 2024
We're also seeing that it doesn't automatically reconnect when the transport is broken using websockets.
isarikaya commentedon Oct 2, 2024
Is it possible for you to create a minimal repo that simulates the issue? @sruetzler
jsilvawbc commentedon Oct 10, 2024
Hi. Just commenting here so I get further notifications as this potentially affects our product.
In the mean time we locked
socket.iorelated dependencies at~4.7.5And due to the new
npm auditreports, we added overrides forcookieto version^0.7.2Thanks.
sruetzler commentedon Oct 11, 2024
I tried to reproduce this in a short example. But until now could not reproduce it.
At this time I don't know what is different in my code that it fails.
Perhaps someone else could help.
What about @jsilvawbc or @FredrikAugust ?
Can you help? Do you know whats different or do you have a simple example code that can reproduce this problem?
FredrikAugust commentedon Oct 11, 2024
@sruetzler
We initialise the io client like this;
And then observe that if you e.g. kill the backend server, it will simply not attempt to reconnect, even though it should based on the docs.
AndersRobstad commentedon Oct 11, 2024
We based the conclusion that the socket should try to automatically reconnect since we had this listener function on the
connect_errorevent. And even though it logged the error as transient, a reconnect attempt was never initialized.None of the below listener function were ever triggered when the backend was killed and the above mentioned transient connection error log was triggered:
wes337 commentedon Oct 14, 2024
I am also facing this issue. It's pretty major since our "online users" counter just drops to 0 anytime we push updates to our code base. I think going back to 4.7.5 is the move for now
darrachequesne commentedon Oct 22, 2024
Hi everyone, sorry for the delay.
I was not able to reproduce the issue:
transportstransports: ["polling", "websocket"]transports: ["websocket"]"No transports available" suggests the
transportsarray is empty, but I don't know how this could happen. This might be linked to this change.darrachequesne commentedon Oct 24, 2024
I would need some additional information.
Does it happen with the client bundle? Or with a bundler (webpack, rollup, ...)? In that case, could you please provide your configuration?
Does it happen randomly? Always?
Does it happen in all browsers?
Thanks in advance.
wes337 commentedon Oct 30, 2024
Hey @darrachequesne
Here's how our frontend connects
joweste commentedon Apr 8, 2025
I have the same problem. Does someone solved it?
FredrikAugust commentedon Apr 9, 2025
Not that I know of @joweste. We ended up writing our own logic...
wes337 commentedon Apr 9, 2025
No, still can't upgrade past 4.7.5
davewgeurts commentedon May 16, 2025
Dang Im also facing this issue in 4.8
FredrikAugust commentedon May 19, 2025
Are there any updates to this, roadmap or the likes? Or perhaps any alternatives worth considering? This isn't a great sign in terms of future reliability.
sep2 commentedon May 22, 2025
We are not using
auth()and doing auth manually inallowRequest(), have no issue since then.darrachequesne commentedon May 22, 2025
@FredrikAugust as I said earlier, I wasn't able to reproduce at all... It looks like an environment-specific issue, otherwise I think that we would have a lot more user reports.
use custom reconnect logic for socketio instead of what is built in, …
linushahs commentedon Dec 17, 2025
I'm facing the same issue. What is the workaround? Should I move back to 4.7.5 version?
darrachequesne commentedon Dec 17, 2025
@linushahs hi! How can we reproduce the issue? Which platform/bundler are you using?
wes337 commentedon Dec 18, 2025
Maybe I can provide more of my setup to help you reproduce it. Here's how our server is setup.
It's an Express.js server, and we're using a couple other things like
helmet,express-rate-limit,socket.io-msgpack-parserNot sure but could it be related to any of this config? Maybe the
allowRequestfunction and theconnectionStateRecoveryconfig?wes337 commentedon Dec 18, 2025
A lot of people are having this issue. But they don't understand what's happening. There are several tickets open about this:
#5299
#5327
#5330
They are all starting after upgrading from version 4.7.5
@darrachequesne
fix(eio-client): restore default transport resolution