2013-04-24 68 views
1

我將創建一組包含非常計算密集型代碼的Web服務。計算可以從1/2秒到20秒運行。計算存在於C代碼中。Node.js適用於計算密集型Web服務

我可能不會有超過20個同時發生的Web服務請求,其中只有一對是較長的運行計算。

我的理解是node.js運行在一個單獨的線程中,所以我將不得不編寫一個node.js插件,它將連接到我的C代碼。 C代碼然後必須在它自己的線程中執行。我將使用node.js提供的線程池異步運行這些計算。我會在多核心機器上運行此功能以最大限度地提高性能。

我描述的體系結構是否正確並且是否適合Node.js?在這樣的應用程序中,Apache或IIS會更好嗎?

回答

1

您可以製作一個本地C程序,並讓節點執行二進制文件,並在完成時執行回調。我覺得有幾個方法,下面是nodejitsu複製的child_process.exec(command, [options], callback)一個例子:

var childProcess = require('child_process'), 
    ls; 

ls = childProcess.exec('ls -l', function (error, stdout, stderr) { 
    if (error) { 
    console.log(error.stack); 
    console.log('Error code: '+error.code); 
    console.log('Signal received: '+error.signal); 
    } 
    console.log('Child Process STDOUT: '+stdout); 
    console.log('Child Process STDERR: '+stderr); 
}); 

ls.on('exit', function (code) { 
    console.log('Child process exited with exit code '+code); 
}); 

編輯
如果需要啓動它後,通過輸入到你的過程中,使用child_process.spawn代替。

節點可以很好地處理Apache的任務;我使用express來託管文件和動態頁面;我的應用程序邏輯是當特定的HTTP請求被做成特定路由時由Express調用的JavaScript代碼。

除非限制同時計算,否則可能會使機器停止工作。我對線程池沒有任何知識或評論。 caolan/async可以幫助管理併發計算(和其他控制流任務)。

+0

這似乎只適用於獨立的可執行文件?我真的需要能夠調用一個函數並傳入並獲取複雜的數據。有沒有辦法做到這一點? – user265445 2013-05-01 09:37:47

+0

我認爲這是可能的,我沒有任何進一步的知識 - gl! – Plato 2013-05-01 16:40:35