gpt4 book ai didi

javascript - NodeJS 中的流

转载 作者:行者123 更新时间:2023-12-02 18:25:07 24 4
gpt4 key购买 nike

我需要一些帮助来理解流在 NodeJS 中的工作原理

我解释一下,我需要编写一个调用 UNIX 进程(使用 spawn)的模块,并且我想将此进程的 stdout 重定向到可读流。

我希望此行为导出可读流并允许另一个模块读取它们。

为此,我编写了一小段代码:

var spawn = require('child_process').spawn
var Duplex = require('stream').Duplex;
var stream = new Duplex;


var start = function() {
ps = spawn('mycmd', [/*... args ...*/]);
ps.stdout.pipe(stream);
};


exports.stream = stream;
exports.start = start;

但是如果我使用这个模块,我会抛出一个异常,表明该流没有实现 _read 方法。

你能帮我解决这个问题吗?

提前致谢。

[编辑]我尝试了创建 Stream 对象的解决方案,但这不起作用,代码如下:

var spawn = require('child_process').spawn;
var Stream = require('stream');
var ps = null;

var audio = new Stream;
audio.readable = audio.writable = true;

var start = function() {
if(ps == null) {
ps = spawn('mycmd', []);

ps.stdout.pipe(stream);
}
};

var stop = function() {
if(ps) {
ps.kill();
ps = null;
}
};


exports.stream = stream;
exports.start = start;
exports.stop = stop;

但是当我尝试收听流时,我遇到了一个新错误:

_stream_readable.js:583
var written = dest.write(chunk);
^
TypeError: Object #<Stream> has no method 'write'

最佳答案

大多数 Node 的 Stream classes并不意味着直接使用,而是作为自定义类型的基础:

Note that stream.Duplex is an abstract class designed to be extended with an underlying implementation of the _read(size) and _write(chunk, encoding, callback) methods as you would with a Readable or Writable stream class.

一个值得注意的异常(exception)是 stream.PassThrough ,这是一个简单的回显流实现。

var PassThrough = require('stream').PassThrough;
var stream = new PassThrough;
<小时/>

另请注意 ps will be a global ,使其可以在所有其他模块中直接访问。

关于javascript - NodeJS 中的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com