2012-05-03 25 views
4

我有一个有效的服务器配置,其中redis无法访问,但服务器可以正常运行(当redis无法找到时,我只是将功能剥离)。当没有连接时,你如何杀死一个redis客户端?

但是,我无法很好地管理连接错误。我想知道连接错误何时失败,并在这种情况下关闭客户端。

我发现连接重试将永不停止。并且quit()实际上被吞噬 - “为下一个服务器连接排队退出。” - 被叫时。

在没有建立连接的情况下,有没有办法杀死客户端?

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

client.on("error", function(err) { 
    logme.error("Bonk. The worker framework cannot connect to redis, which might be ok on a dev server!"); 
    logme.error("Resque error : "+err); 
    client.quit(); 
}); 

client.on("idle", function(err) { 
    logme.error("Redis queue is idle. Shutting down..."); 
}); 

client.on("end", function(err) { 
    logme.error("Redis is shutting down. This might be ok if you chose not to run it in your dev environment"); 
}); 

client.on("ready", function(err) { 
    logme.info("Redis up! Now connecting the worker queue client..."); 
}); 
  • 错误 - Resque错误:错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED
  • 错误 - Redis的被关停。如果您选择不要在你的开发环境中运行它,这可能是好的
  • 错误 - Resque错误:错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED
  • 错误 - Resque错误:错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED
  • 错误 - Resque错误:错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED
  • 错误 - Resque错误:错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED

有趣的一件事是事实'结束'事件被发射。为什么?

回答

1

你可能只想强行结束连接与client.end()上错误的Redis,而不是使用client.quit()它等待所有未完成的请求完成,然后发送QUIT命令,你也知道需要与Redis的工作连接完成。

+1

end()由于非常类似的原因不起作用。即使在客户端结束之后,也会引发连接错误。现在情况更糟,虽然客户端不在了,但是节点会崩溃。根本原因似乎是重试。 – Greg

相关问题