在快速服务器中产生subprocess
在我的快递服务器中有一些function,我需要作为subprocess运行,否则他们将绑定服务器,其他人将无法访问它。 他们已经在使用asynchronous模块,但他们仍然绑定服务器,除非他们作为subprocess运行。
一个问题是将req和resparameter passing给它们。
如何才能做到这一点?
使用child_process.fork ,你可以发送消息给subprocess。
编辑:我不正确地build议将req
和res
作为消息parameter passing给subprocess。 这是不可能的,因为所有发往和来自subprocess的消息都被转换成JSON。 相反,你可以在你的服务器上保留一些types的队列。 下面只是作为一个例子,你可能想要更强大的东西:
child.js:
process.on('message', function(message) { // Process data process.send({id: message.id, data: 'some result'}); });
server.js:
var child_process = require('child_process'); var child = child_process.fork(__dirname + '/child.js'); var taskId = 0; var tasks = {}; function addTask(data, callback) { var id = taskId++; child.send({id: id, data: data}); tasks[id] = callback; }; child.on('message', function(message) { // Look up the callback bound to this id and invoke it with the result tasks[message.id](message.data); }); app.post('/foo', function(req, res) { addTask('some data', function(result) { res.send(result); }); });
这是多一点参与,但它应该工作。 你可能会很快从这样一个系统中发展出来,并且可以通过一个适当的队列来更好地服务。