6

我正在使用 Node.js、Express、Redis 和 Socket.io。当 Redis 关闭时,Node.js 将终止。

我该如何防止这种情况,可能是在某个地方进行代码重新连接之类的?

输出:

info - socket.io started
Express server listening on port 3000

错误:

events.js:72
        throw er; // Unhandled 'error' event
              ^ Error: Redis connection to 127.0.0.1:6380 failed - connect ECONNREFUSED
    at RedisClient.on_error (...../node_modules/redis/index.js:151:24)
    at Socket.<anonymous> (...../node_modules/redis/index.js:86:14)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:426:14
    at process._tickCallback (node.js:415:13)
4

2 回答 2

13

您的 redis 客户端实例似乎没有错误处理程序。你能提供一些你的代码的摘录吗?也许我们可以通过这种方式更好地帮助您。只是一条错误消息少了一点。

如果我不得不猜测,那么我会说你没有错误处理程序......

见这里:https ://github.com/mranney/node_redis#usage

你有错误回调吗?

例子:

var redis = require("redis"),
client = redis.createClient();


// This is required so your error doesn't bubble
// upwards and kills your instance

client.on("error", function (err) {
    console.log("Error " + err);
});

node_redis 客户端会自动重新连接,因此您无需处理此问题,尽管您可以配置 max_attempts 和其他选项。见这里:https ://github.com/mranney/node_redis#rediscreateclientport-host-options

我希望我能提供一些有用的信息

于 2013-09-01T16:10:52.570 回答
0

如果您使用的是 socket.io redisAdapter,请在创建您的 socket.io 服务器后执行此操作:

io.of('/').adapter.on('error', (err)=>{console.log('adapter error',err)});
于 2021-11-17T10:09:10.300 回答