私のエクスプレスサーバーには、子プロセスとして実行する必要のある関数がいくつかあります。そうしないと、サーバーが拘束され、他の人がアクセスできなくなるためです。彼らはすでに非同期モジュールを使用していますが、子プロセスとして実行されていない限り、サーバーを拘束します。
1つの問題は、reqパラメーターとresパラメーターをそれらに渡すことです。
これはどのように行うことができますか?
私のエクスプレスサーバーには、子プロセスとして実行する必要のある関数がいくつかあります。そうしないと、サーバーが拘束され、他の人がアクセスできなくなるためです。彼らはすでに非同期モジュールを使用していますが、子プロセスとして実行されていない限り、サーバーを拘束します。
1つの問題は、reqパラメーターとresパラメーターをそれらに渡すことです。
これはどのように行うことができますか?
child_process.forkを使用すると、子プロセスにメッセージを送信できます。
編集:子プロセスにメッセージパラメータとして渡すように誤ってアドバイスしましreq
た。res
子プロセスとの間のすべてのメッセージがJSONに変換されるため、これは不可能です。代わりに、サーバーにある種のキューを保持することができます。以下は単なる例であり、より堅牢なものが必要な場合があります。
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);
});
});
もう少し複雑ですが、機能するはずです。あなたはそのようなシステムからすぐに成長するかもしれません、そして適切なキューによってよりよく役立つかもしれません。