domain 可以提前捕获到异常,从而使得 process 工作进程不崩溃
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
var domain = require('domain');
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
// fork 出新的进程
var worker = cluster.fork();
console.log(worker.id);
}
} else {
http.createServer(function (req, res) {
var d = domain.create();
// domain 捕获异常
d.on('error', function (err) {
res.writeHead(500);
res.end("error\n" + err);
d.dispose();
});
d.run(function () {
// 手工出发一个异常
throw new Error("a");
res.writeHead(200);
res.end("hello world\n" + process.pid);
})
}).listen(1234);
// 由于domain 捕获了错误,如下代码不会执行
process.on('uncaughtException', function (err) {
console.log("process error")
});
}
参考文档http://deadhorse.me/nodejs/2013/04/13/exception_and_domain.html