Node.js有不同的选项来使用数据。 流0,1,2,3等等......
我的问题是关于现实生活的应用 这些不同的选择。我很了解 可读/读取,数据事件和 管道,但不是非常有信心选择具体 方法
例如,如果我想使用流量控制,请阅读 可以使用一些手动工作以及管道。 数据事件忽略流量控制,我应该停止使用 普通数据事件?
答案 0 :(得分:5)
对于大多数事情,您应该能够使用
src.pipe(dest);
如果你看一下the source code for the Stream.prototype.pipe implementation,你会发现它只是一个非常方便的包装器,可以为你设置一切
对于all the work I do with streams,我通常只选择正确的流类型(Readable
,Writable
,Duplex
,Transform
或PassThrough
)然后在流上定义正确的方法(_read
,_write
和/或_transform
)。最后,我使用.pipe
将所有内容连接在一起。
看到流设置似乎是“循环”
是很常见的client.pipe(encoder).pipe(server).pipe(decoder).pipe(client)
举个例子,这是我在burro模块中使用的流。您可以将对象写入此流,然后您可以从中读取 JSON字符串。
// https://github.com/naomik/burro/blob/master/lib/encoder.js
var stream = require("stream"),
util = require("util");
var Encoder = module.exports = function Encoder() {
stream.Transform.call(this, {objectMode: true});
};
util.inherits(Encoder, stream.Transform);
Encoder.prototype._transform = function _transform(obj, encoding, callback) {
this.push(JSON.stringify(obj));
callback(null);
};
作为一般推荐,您几乎总是会像这样编写Streams。也就是说,您编写自己的“类”,它继承自其中一个内置流。直接使用内置流并不实用。
为了演示如何使用它,首先要创建一个新的流实例
var encoder = new Encoder();
通过将编码器输出到stdout
来查看编码器输出的内容encoder.pipe(process.stdout);
将一些示例对象写入其中
encoder.write({foo: "bar", a: "b"});
// '{"foo":"bar","a":"b"}'
encoder.write({hello: "world"});
// '{"hello":"world"}'