将缓冲区传递给 ChildProcess Node.js
Pass Buffer to ChildProcess Node.js
这里是 Node.Js 我想在子进程中进行图像处理的地方。
如您所见,我获取文件 image.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);
然而,当我 运行 这个文件时,我得到这个错误:
[错误:流产生空缓冲区]
对我来说,缓冲区似乎没有正确传递给子进程?
我做错了什么? 我可以在子任务中对 运行 图像处理做些什么。 对我来说重要的是它不从子进程中的文件中读取。因为我想再次读取一个文件,然后将缓冲区发送给几个进行图像转换的子进程。谢谢!
您没有在子流程中做任何工作。它只是 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
来终止 worker。
查看 cluster 模块以了解替代方法。
这里是 Node.Js 我想在子进程中进行图像处理的地方。
如您所见,我获取文件 image.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);
然而,当我 运行 这个文件时,我得到这个错误:
[错误:流产生空缓冲区]
对我来说,缓冲区似乎没有正确传递给子进程? 我做错了什么? 我可以在子任务中对 运行 图像处理做些什么。 对我来说重要的是它不从子进程中的文件中读取。因为我想再次读取一个文件,然后将缓冲区发送给几个进行图像转换的子进程。谢谢!
您没有在子流程中做任何工作。它只是 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
来终止 worker。
查看 cluster 模块以了解替代方法。