我有一个用Node.js编写的应用程序。
这个应用程序分为三个部分:
launcher.js,启动另外两个部分,并在处理清理后在崩溃/更新时重新启动它们。
app.js,对计算机本身进行操作。
server.js用于访问日志和不同的命令。
launcher的简化代码如下:
var cluster = require('cluster'),
exec = require('child_process').exec,
server;
if (cluster.isMaster) {
cluster.fork();
server = exec('server.js');
cluster.on('exit', function(worker, code, signal) {
//Clean corrupted data, log crash if neccessary, reload source code for update ...
cluster.fork();
});
server.on('exit', function () {
//Same as for app, with a different handling of signal...
server = exec('node server.js');
});
} else {
var self = require('app.js');
self.start();
}
集群的好处在于它们与启动器在同一个进程中,因此我可以处理一些错误而无需重新启动应用程序(只需调用应用程序内部的正确函数进行“软重启”),并保持所有内容在同一个进程中。
而使用exec时,我必须重新启动服务器,有时还不知道出了什么问题,这意味着需要一个子shell,这是我不喜欢的。
是否有一种方法可以分叉集群,但启动不同的代码?