首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将缓冲区传递给ChildProcess Node.js

将缓冲区传递给ChildProcess Node.js
EN

Stack Overflow用户
提问于 2015-06-19 16:46:43
回答 1查看 1.1K关注 0票数 1

这里有关于Node.Js的内容,我想要在子进程中进行图像处理。

如您所见,我接受文件image.jpg,并希望在子进程中将它写回hello.jpg

代码语言:javascript
运行
复制
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);

但是,当我运行这个文件时,我会得到以下错误:

错误:流生成空缓冲区

对我来说,缓冲区似乎没有正确地传递给子进程?,我错了什么?,我能做什么来在子任务中运行图像处理。对我来说,很重要,它不能从子进程中的文件中读取。因为我想再次读取一个文件,然后将缓冲区发送到几个执行图像转换的子进程。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 18:27:01

您没有在子进程中执行任何工作。它只是node -i而不是别的什么。所有的图像处理都发生在主过程中。

要修复它,您实际上可以运行另一个节点进程,并给它一些脚本来执行,比如worker.js

代码语言:javascript
运行
复制
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);
      }
   });
});

然后将从主脚本创建一个子进程:

代码语言:javascript
运行
复制
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来终止工作人员。

看看替代方法的集群模块。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30943250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档