1

我正在使用 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");
});

您认为这是解决我的问题的正确方法吗?

谢谢

4

1 回答 1

1

如果您只运行一个工作人员,则使用forever或之类的主管会更容易pm2,它们是专门为此任务编写的。如果您计划添加更多工作人员并使用集群负载平衡,那么可以,这无疑是一种正确的方法。

于 2013-09-27T11:16:59.917 回答