[英]Pass Buffer to ChildProcess Node.js
在這里,我要在Node.Js上執行子進程中的圖像處理。
如您所見,我將文件image.jpg
並想在一個子hello.jpg
中將其寫回到hello.jpg
:
var node = require('child_process').spawn('node',['-i']);
var fs = require('fs');
node.stdout.on('data',function(data) {
var fs = require('fs');
var gm = require('gm').subClass({ imageMagick: true });
gm(data)
.resize(500, 500)
.toBuffer("jpg", function(err, buffer) {
if (err) {
console.log(err);
}else{
fs.writeFile("hello.jpg", buffer);
}
});
});
var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.write(buffer);
但是,當我運行此文件時,出現此錯誤:
[錯誤:流產生空緩沖區]
對我來說,似乎緩沖區沒有正確傳遞給子進程? 我怎么了 如何在子任務中運行圖像處理。 對我來說,重要的是不要從子進程的文件中讀取它。 因為我想再次讀取一個File,然后將緩沖區發送給執行Image Transformations的多個子進程。 謝謝!
您沒有在子流程中做任何工作。 它只是node -i
而已。 您所有的圖像處理都在主過程中進行。
要解決此問題,您實際上可以運行另一個Node進程並為其執行一些腳本,例如worker.js
:
process.stdin.on('data',function(data) {
var fs = require('fs');
var gm = require('gm').subClass({ imageMagick: true });
gm(data)
.resize(500, 500)
.toBuffer("jpg", function(err, buffer) {
if (err) {
console.log(err);
}else{
fs.writeFile("hello.jpg", buffer);
}
});
});
然后,您將從主腳本創建一個子流程:
var node = require('child_process').spawn('node', ['worker.js']);
var fs = require('fs');
var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.end(buffer);
請注意,我在最后一行中使用了node.stdin.end
來終止工作node.stdin.end
。
查看集群模塊的替代方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.