Description
I encountered an error "Error: timeout reached: only 0 responses received out of 1" while scaling up a high-traffic system with multiple nodes.
My system run 2 same instances on digitalOceans, and sometime it had been crash with error:
/workspace/node_modules/@socket.io/redis-streams-adapter/dist/cluster-adapter.js:348 reject(new Error(
timeout reached: only ${storedRequest.current} responses received out of ${storedRequest.expected})); Error: timeout reached: only 0 responses received out of 1 at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7)
my setup redis
`const redisClient = createClient({
url: config.REDIS_ADDRESS,
});
const initRedis = () => {
redisClient.on('error', err => console.log(err));
return redisClient.connect().then(() => console.log('connected redis success'));
};`
my setup adapter is:
Io.io = new Server(httpServer, { adapter: createAdapter(redisClient, { maxLen: 500_000, readCount: 5000, heartbeatInterval: 5_000, heartbeatTimeout: 120_000, }), cors: { origin: config.CORS_WEBSOCKET, }, connectionStateRecovery: { maxDisconnectionDuration: config.MAX_DISCONNECTION_DURATION, skipMiddlewares: true, }, }).use(checkTokenAuth);
my setup use witth express:
const server = http.createServer(app); const io = new Io(); Promise.all([db.init(), initRedis()]).then(async () => { server.listen(config.PORT, () => { logger.info(
HttpNetwork is running at port: ${config.PORT}); }); io.startSocket(server, () => console.log(
socket is running at port: ${config.PORT})); });