首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取(拉)对管(控制流量)与数据(推)

读取(拉)对管(控制流量)与数据(推)
EN

Stack Overflow用户
提问于 2014-03-31 06:04:37
回答 1查看 1.7K关注 0票数 2

Node.js有不同的选项来使用数据。流0,1,2,3等等.

我的问题是这些不同选项在现实生活中的应用。我相当理解可读的/read、数据事件和管道之间的区别,但对选择特定的方法并不很有信心。

例如,如果我想使用流控制,可以使用一些手动阅读以及管道。数据事件忽略流控制,是否应停止使用“平原数据事件”?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 06:11:20

在大多数情况下,您应该能够使用

代码语言:javascript
复制
src.pipe(dest);

如果您查看Stream.prototype.pipe实现的源代码,您会发现它只是一个非常方便的包装器,可以为您设置所有的东西

对于我处理流的所有工作,我通常只选择合适的流类型(ReadableWritableDuplexTransformPassThrough),然后在流上定义合适的方法(_read_write和/或_transform)。最后,我使用.pipe将所有东西连接在一起。

这是非常常见的看到流的设置,似乎是“圆形”

代码语言:javascript
复制
client.pipe(encoder).pipe(server).pipe(decoder).pipe(client)

举个例子,这里是我在驴子模块中使用的流。您可以对象写入该流,也可以从它读取 JSON字符串。

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

作为一个一般性建议,您几乎总是这样编写您的流。也就是说,您可以编写您自己的“类”,该类继承自内置流之一。对于您来说,直接使用内置流是不实际的。

要演示如何使用它,请从创建流的新实例开始。

代码语言:javascript
复制
var encoder = new Encoder();

通过将编码器输送到标准输出,查看编码器输出的内容。

代码语言:javascript
复制
encoder.pipe(process.stdout);

向它写入一些示例对象

代码语言:javascript
复制
encoder.write({foo: "bar", a: "b"});
// '{"foo":"bar","a":"b"}'

encoder.write({hello: "world"});
// '{"hello":"world"}'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22754601

复制
相关文章

相似问题

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