4
在我的快速服務器中,有一些功能需要作爲子進程運行,否則它們將綁定服務器,其他人將無法訪問它。他們已經在使用異步模塊,但他們仍然綁定服務器,除非它們作爲子進程運行。在快遞服務器中產生子進程
一個問題是將req和res參數傳遞給它們。
這怎麼辦?
在我的快速服務器中,有一些功能需要作爲子進程運行,否則它們將綁定服務器,其他人將無法訪問它。他們已經在使用異步模塊,但他們仍然綁定服務器,除非它們作爲子進程運行。在快遞服務器中產生子進程
一個問題是將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);
});
});
它更復雜一些,但它應該管用。你可能會很快從這樣一個系統發展而來,並且可以通過一個適當的隊列更好地服務。
當我嘗試傳遞req時,它給出了一個錯誤 –