1
我在NodeJS上編寫圖像處理Web服務,在基本上我需要弄清楚如何使實際的圖像處理線程化。當我通過Apache AB進行測試時,NodeJS只使用一個內核並停止運行,我確實在這裏做了一些錯誤。我如何重新設計這個簡單的應用程序,以利用我的服務器CPU上的多個核心。我如何在NodeJS中進行圖像處理?
我縮小了所有輸入過濾條件,簡化了圖像處理功能,讓您瞭解應用程序結構而不是長碼位。
在app.js
app.get('/generate/:q', function(req, res){
var textString = req.params.q;
res.setHeader("Content-Type", "image/png");
res.end(generator.s());
});
在generate.js
var Canvas = require('canvas')
, Font = Canvas.Font
, fs = require('fs')
, path = require("path")
, plate = new Canvas.Image;
//To keep plate in RAM between requests.
fs.readFile(__dirname + '/plates/dhw132.png', function(err, squid){
if (err) throw err;
plate.src = squid;
});
exports.s = function() {
canvas = new Canvas(731,1024);
ctx = canvas.getContext('2d');
ctx.drawImage(plate, 0, 0, plate.width, plate.height);
return canvas.toBuffer();
}
我怎麼能改寫這個讓generator.s()線程?
Node.js是單線程的。在NodeJs中沒有簡單的方法來完成它。 http://stackoverflow.com/questions/10773564/which-would-be-better-for-concurrent-tasks-on-node-js-fibers-web-workers-or-t – WiredPrairie
是的,我意識到這是由於方式節點處理請求,但我仍然無法繞過一個簡單的方法在不同的內核中創建這個可執行文件,我閱讀了Child Process forking,但似乎沒有簡單的方法將實際的平板讀入內存,然後產生canvas函數放入一個進程中,該進程通過引用另一個線程中的文件來執行。 – saxly
只有一個線程。最簡單的方法就是在每個進程中加載圖像。正如你所看到的,數據處理並不一定非常適合NodeJ。它適用於小型異步任務。 – WiredPrairie