我正在使用Express应用程序,我需要分配一个昂贵的流程,并在完成后终止该流程。
我已经在Stack Overflow和搜索中看到了不同的方法,但我想知道在使用child_process.fork(...)
方法时这是否是正确的方法。
// route handler - /routes/api.js
exports.redirect = function(req, res) {
var campaignId = req.query.campaignId,
destination = req.query.destination,
worker = child_process.fork(__dirname + '/../workers/redirect');
worker.send({
campaignId: campaignId,
destination: destination
});
worker.on('message', function(msg) {
this.kill();
});
return res.redirect(destination);
};
// forked process file referenced as "worker" - /workers/redirect.js
var db = require('../db'),
RedirectedUrlService = require('../services/redirect'),
logger = require('../logger');
process.on('message', function(data) {
RedirectedUrlService.create(data, function(error, redirectedUrl) {
if (error) {
logger.log('error', error);
}
process.send('done');
});
});
如果我:ps ax | grep node
,我没有看到任何额外的工作人员引用,所以它似乎正在做我期望的事情。
这是正确的,我的代码仍然是非阻塞的吗?或者通过向父母发送消息来发出kill()
,我是否完全打败了创建分支的目的?
答案 0 :(得分:1)
在您的子进程中,使用process.exit(0);