Изящно обрабатывать исключения в Nodejs
Я использую nodejs для создания автономной системы кэширования для веб-службы. По сути, он время от времени опрашивает публичные методы веб-сервиса и кэширует данные в memcached. Работает просто отлично.
Тем не менее, я хочу, чтобы он был пуленепробиваемым и выдерживал любые необъяснимые исключения, которые приводили к остановке сервера. Я читал о различных подходах и считаю, что кластерный модуль действительно хорош для моих нужд. Однако я не буду использовать все ядра ЦП для своих целей, так как у меня работает только 1 поток и обновляется кеш.
Единственная причина, по которой я буду его использовать, - это возможность грациозного убийства рабочего и легкое разветвление нового.
var memwatch = require('memwatch'),
cluster = require('cluster');
if (cluster.isMaster) {
console.log('start cluster with 1 workers');
cluster.fork();
cluster.on('exit', function(worker) {
console.log('worker %s died. restart...', worker.process.pid);
cluster.fork();
});
} else {
var http = require('http'),
app = require("./app.js");
http.createServer().listen(9000);
app.init();
}
process.on('uncaughtException', function (err) {
console.error((new Date).toUTCString() + ' uncaughtException:', err.message)
console.error(err.stack)
process.exit(1)
})
memwatch.on("leak", function(){
console.log("leak detected");
});
Считаете ли вы это правильным подходом к моей проблеме?
Спасибо
1 ответ
Если вы работаете только с одним работником, проще использовать forever
или же pm2
, они специально написаны для этой задачи. Если вы планируете добавить больше работников и использовать балансировку нагрузки кластера, то да, это, несомненно, правильный подход.