我在这里有一段时间。我已经阅读了大量文档以及其他人关于同一主题的问题,并且无法找到如何阻止这种情况发生的答案。我故意关闭redis服务器,以确保应用程序在生产中不会完全走向核心,但我所做的任何事情都似乎阻止了这种情况的发生。这里是我的代码是正确的什么现在一个很简单的例子...redis-server离线崩溃节点
var cluster = require('cluster');
var express = require('express');
var http = require('http');
var redis = require('redis');
var redisAdapter = require('socket.io-redis');
var sticky = require('sticky-session');
var port = process.env.PORT || 3333;
var workers = 3;
var app = express();
var server = http.createServer(app);
var io = require('socket.io')(server);
if(!sticky.listen(server, 3333, {workers: workers})) {
server.once('listening',() => {
console.log('server started on port ' + port);
process.on('exit',() => {
io.emit('error', {errorType: 'SERVER_SHUTDOWN'});
});
process.on('uncaughtException', (err) => {
console.log('uncaught exception occurred');
console.log(err);
});
});
} else {
addRedisAdapter(io);
addIOEventHandler(io);
}
function addRedisAdapter(io) {
var redisUrl = process.env.REDISTOGO_URL || 'redis://127.0.0.1:6379';
var redisOptions = require('parse-redis-url')(redis).parse(redisUrl);
var pub = redis.createClient(redisOptions.port, redisOptions.host, { returnBuffers: true});
var sub = redis.createClient(redisOptions.port, redisOptions.host, {returnBuffers: true});
io.on('error', (err) => {
console.log(err);
});
io.on('uncaughtException', (err) => {
console.log(err);
});
io.adapter(redisAdapter({pubClient: pub, subClient: sub}));
console.log('redis adapter started');
}
function addIOEventHandler(io) {
//all the events for io
}
现在,我开始Redis的服务器,然后我开始与这个服务器的node.js。然后我弹出一个终端窗口并输入“redis-cli shutdown”来强制redis服务器脱机。只要我这样做,node.js终端窗口就会一遍又一遍循环遍历相同的错误。
events.js:154
throw er; // Unhandled 'error' event
^
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at Object.exports._errnoException (util.js:893:11)
at exports._exceptionWithHostPort (util.js:916:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1075:14)
redis adapter started with url: redis://127.0.0.1:6379
我都process.on( 'uncaughtException' ......和io.on( 'uncaughtException' ......以及一个io.on( '错误',...处理程序,但每时间服务器只是坐在那里循环说有一个“未处理的错误”事件“ 有人可以请帮助我在这里。我不明白这可能是未经处理的错误,它没有任何意义在我心中 预先感谢您提供的任何可能的帮助,我一直在尝试寻找其他可能的选项,并且他们都说同样的事情,使用io.on('error',或者io.on('uncaughtException'或process.on('uncaughtException',我拥有它们,它仍然错误并且崩溃节点。
尝试在客户端添加错误处理,即pub.on(“error”,(err)=> {console.log(err)}); – SadiRubaiyet
@SadiRubaiyet当我添加pub.on('错误'...但是我仍然得到一个循环和一个错误...我得到一个控制台日志... events.js:154 throw er; // Unhandled'error “事件 ^ 错误:Redis的连接127.0.0.1:6379失败 - 连接ECONNREFUSED 127.0.0.1:6379 在Object.exports._errnoException(util.js中:893:11)在exports._exceptionWithHostPort (util.js中:916:20) at TCPConnectWrap.afterConnect [as oncomplete](net.js:1075:14) –
非常棒的人,很乐意帮忙,另外你可以使用client.end或客户端.quit出错,甚至设置一个重试战略描述在驱动程序的[github页面](https://github.com/NodeRedis/node_redis) – SadiRubaiyet