nodejs在redis失败时终止
Posted
技术标签:
【中文标题】nodejs在redis失败时终止【英文标题】:nodejs terminates on redis failure 【发布时间】:2013-09-04 16:44:14 【问题描述】:我正在使用 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)
【问题讨论】:
对错误信息表示抱歉。不知道如何在这里格式化它们。 如果您可以将以下答案标记为已接受,那就太好了 - 这是一个有用的答案。 好久不见。我记不太清了。你认为这是答案吗?如果是这样,我会标记它。 【参考方案1】:您的 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
希望我能提供一些有用的信息
【讨论】:
我会试试这个。谢谢! 不是redis客户端,是socket.io redis适配器。【参考方案2】:如果您使用的是 socket.io redisAdapter,请在创建您的 socket.io 服务器后执行此操作:
io.of('/').adapter.on('error', (err)=>console.log('adapter error',err));
【讨论】:
以上是关于nodejs在redis失败时终止的主要内容,如果未能解决你的问题,请参考以下文章
当 InternetOpenURL 尝试(并且失败)连接时,如何避免充分利用 CPU 或终止?