优雅地处理Node Js中的异常

时间:2013-09-27 10:28:25

标签: node.js cluster-computing

我正在使用nodejs为Web服务构建脱机缓存系统。 基本上,它偶尔会轮询Web服务的公共方法,并将数据缓存在memcached中。 工作得很好。

但是,我希望它能够防弹并且能够解决任何未被捕获的异常问题,从而降低服务器的性能。 我已经了解了不同的方法,我相信群集模块非常适合我的需求。但是,我不会将所有CPU内核用于我的目的,因为我只运行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 个答案:

答案 0 :(得分:1)

如果您只运行一名工作人员,则可以更轻松地使用foreverpm2等主管,它们是专门为此任务编写的。如果您计划添加更多工作人员并使用群集负载平衡,那么肯定是一种正确的方法。