Skip to content
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

Error: timeout reached while waiting for sockets response #367

Open
hamitsaka opened this issue Dec 2, 2020 · 15 comments
Open

Error: timeout reached while waiting for sockets response #367

hamitsaka opened this issue Dec 2, 2020 · 15 comments

Comments

@hamitsaka
Copy link

hamitsaka commented Dec 2, 2020

socket.io@3.0.3
socket.io-redis@6.0.1

Calls made to the adapter methods as follows:
`
const sockets = await io.of('/').adapter.sockets();
console.log(sockets); // a Set containing all the connected socket ids

// this method is also exposed by the Server instance
const sockets = io.in('room3').allSockets();
console.log(sockets); // a Set containing the socket ids in 'room3'
`

Causes the below exception being thrown:
(node:20818) UnhandledPromiseRejectionWarning: Error: timeout reached while waiting for sockets response at Timeout._onTimeout (/var/app/node_modules/socket.io-redis/dist/index.js:286:28) at listOnTimeout (internal/timers.js:549:17) at processTimers (internal/timers.js:492:7) (node:20818) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag--unhandled-rejections=strict(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)

@cesco69
Copy link

cesco69 commented Dec 10, 2020

same error

@alkalox
Copy link

alkalox commented Mar 11, 2022

Getting this error. Any clue for fixes?

@unicornsoftwareinc
Copy link

unicornsoftwareinc commented May 9, 2022

I am having the same issue and I'm at a loss on how to stop it.

Error: timeout reached while waiting for sockets response
at Timeout._onTimeout (/app/node_modules/@socket.io/redis-adapter/dist/index.js

This is with:
"socket.io": "^4.4.0"
"@socket.io/redis-adapter": "^7.0.1"

I've pretty much wrapped everything in try/catch blocks and .catch() where promises are involved. Really need a solution here.

@andreuka
Copy link

getting this error randomly

@lehno
Copy link

lehno commented Aug 4, 2022

Same error using ioredis

@willjk
Copy link

willjk commented Dec 14, 2022

This happened to me when the connection of the socket server loses connection to the redis server. We had it happen when our redis server went down and we tried to send things via redis

@gabrielgrijincu
Copy link

Happening to me too.

Using ioredis for connection and fetchSockets instead of allSockets due to the deprecation of allSockets sice socket.io@4.5.3, but the result is the same.

Error: timeout reached while waiting for fetchSockets response
    at Timeout._onTimeout (/node_modules/@socket.io/redis-adapter/dist/index.js:559:28)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7)

@hysapp
Copy link

hysapp commented Sep 1, 2023

Same problem when the number of clients is large.

@italosvieira
Copy link

Same error here. Looking at the lib seems like the error is generated on this line:

new Error("timeout reached while waiting for fetchSockets response")

@darrachequesne Can you help us? What is the logic of this if that generates the error?

    if (this.requests.has(requestId)) {
      reject(
        new Error("timeout reached while waiting for fetchSockets response")
      );
      this.requests.delete(requestId);
    }

@cody-evaluate
Copy link

I am seeing this issue as well intermittently

@cody-evaluate
Copy link

seems to happen when numSub and msgCount are off by 1

{ type: 5, numSub: 3, resolve: [Function (anonymous)], timeout: Timeout { _idleTimeout: 5000, _idlePrev: [TimersList], _idleNext: [Timeout], _idleStart: 5650, _onTimeout: [Function (anonymous)], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(refed)]: true, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 391, [Symbol(triggerId)]: 0 }, msgCount: 2, sockets: [] }

@introspection3
Copy link

me too

@alirafiq-js
Copy link

allSockets

allSockets works for me, my app deployed on k8, on single instance it was fine, fetchsocket timeout on multiple instances

@HannaSamia
Copy link

anyone found a solution??

@darrachequesne
Copy link
Member

The timeout might happen if the requesting server does not receive enough responses from the other servers in the cluster.

Catching the exception and retrying upon failure should account for those temporary issues:

async function fetchSockets() {
  for (let i = 0; i < MAX_RETRIES; i++) {
    try {
      return await io.in("room1").fetchSockets();
    } catch (e) {
      // timeout error
    }
  }
  throw "too many retries";
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests