nod*_*nja 4 javascript asynchronous web-services process node.js
在我的快速服务器中,有一些功能需要作为子进程运行,否则它们将占用服务器而其他人将无法访问它.他们已经在使用异步模块,但他们仍然会绑定服务器,除非它们作为子进程运行.
一个问题是将req和res参数传递给它们.
如何才能做到这一点?
Lin*_*iel 13
使用child_process.fork,您可以向子进程发送消息.
编辑:我建议不正确传递req,并res作为消息参数的子进程.这是不可能的,因为进出子进程的所有消息都转换为JSON.相反,您可以在服务器中保留某种队列.以下仅作为示例,您可能需要更强大的功能:
child.js:
process.on('message', function(message) {
// Process data
process.send({id: message.id, data: 'some result'});
});
Run Code Online (Sandbox Code Playgroud)
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);
});
});
Run Code Online (Sandbox Code Playgroud)
它涉及更多,但它应该工作.您可能会很快从这样的系统中发展出来,并且可以通过适当的队列来提供更好的服务.
| 归档时间: |
|
| 查看次数: |
4896 次 |
| 最近记录: |