对流程介绍(流)在Node.js

对流程介绍(流)在Node.js
什么是河流

说到流量,它涉及在*nix *nix管道的概念,在壳的流程如|实施(关道付)的桥梁数据的一个过程的输出(stdout)可以直接作为一个过程的输入(stdin)。

在节点中,流的概念与此类似,表示数据流被桥接的能力。



流化的本质在于管道()方法,桥接的能力是在管道()方法中桥接数据流的两端(上游/下游或读/写流)。
伪代码的形式如下:

复制代码代码如下所示:

(上游)管道(下游)

readable.pipe(写);
分类流程

它不打算讨论经典流之前所谓的节点v0.4.then,流量分为几类(所有的抽象接口:

1.stream.readable可读流(的_read方法需要实现,并重点对数据流中读取的细节

2.stream.writable写入流(的_write方法需要实施,并注重细节的数据流写入

3.stream.duplex可读/写流(你需要实现上述两个接口,并在上述两个接口细节的关注

4.stream.transform继承双工(的_transform方法需要实现,并重点对数据块的处理

简单的说:

1)管道()的所有者必须具有可读流量(不受限)的能力。它has'readable ' /数据/'或'关闭' / 'error'series事件订阅,和阅读()/(),暂停/恢复()被调用。

2)管道()的参数必须具有可写流(不受限)的能力。它has'drain ' / 'pipe ' / 'unpipe '错误' / / 'finish'events访问和写()/(),最后打电话。

什么鬼

有焦虑的线索吗不要着急。我会打破流,并作为一个低级别的代码工人拉你。

流类,这是在js源代码定义的,是:

复制代码代码如下所示:

VaR是需要('eventsEventEmitter);

VaR工具=需要('util);

util.inherits(流,EE);
函数流(){

ee.call(本);

}
你可以看到,在本质上,流是EventEmitter,这意味着它有一个事件驱动的功能(发出 /,…)。我们都知道,Node.js是基于V8事件驱动的平台,实现事件驱动的异步回调的节点特征流编程。

例如,在可读流中,有可读事件。在暂停只读流中,只要数据块准备好读取,它将被发送到订阅服务器。可读的流是什么该请求的req.part、FTP或多在表达形式上传,系统中的标准输入,process.stdin,等与可读性的事件,我们可以做一个工具如处理shell命令的输出分析器:

复制代码代码如下所示:

process.stdin.on('readable,函数(){(){

VaR buf = process.stdin.read();

如果(BUF){

VaR数据= buf.tostring();

解析 /数据…

}

});
这就要求:

复制代码代码如下所示:

头10 some.txt节点parser.js |
对于可读流,我们也可以订阅它的数据和结束事件以获取数据块,并在流耗尽时获得通知,如在经典套接字示例中。

复制代码代码如下所示:

Req.on('connect功能(RES,插座,头){

Socket.on(数据功能(块){

console.log(chunk.tostring());

});

Socket.on(函数(){(){

Proxy.close();

});

});
可读流状态切换

需要注意的是,可读流有两种状态:流动模式(种子)和暂停模式(停顿)。前者不能停止的话,谁会被保存在管立即,后者将暂停直到下游stream.read是显式调用读取数据块的。可读流初始化暂停模式。

这两种状态可以互相切换,其中,

任何下列行为,停顿转流:

1。将数据事件订阅添加到可读的流中

2。可读调用。

三.将可读的流和桥接器的管道(可写)调用到可写流。

如果有以下行为,流动就会回到停顿状态:

1、可读流没有任何流的管道,可调。暂停()暂停

2。可读流管流,需要清除掉所有的数据事件订阅,并调用。Unpipe()由一个解除下游流动的方法之一。

神奇的

结合流的异步特性,我可以编写应用程序:直接将用户A的输出桥接到用户的B页面。

复制代码代码如下所示:

Router.post(后功能(REQ,RES){

VaR目标=请求标头{ 'destination}; / /人

{ } =请求目的地缓存;

是的,不返回,所以最好是Ajax请求。

});
当用户B请求时:

复制代码代码如下所示:

router.get( /收件箱功能(REQ,RES){

无功用户= { }标题用户的要求;

Cache.find(用户、功能(呃,previousreq){ / /找到之前的存款要求

新的多方形式;

form.parse(previousreq); / /文件给我。

形式。('part功能(部分){

part.pipe(RES); / /流法):
部分。(错误功能(ERR){

console.log(ERR);

Messaging.setRequestDone(UniqueID);

返回res.end(ERR);

});

});

});

});
参考资源

如何用流编写节点程序:流手册

tag:流程电脑软件Nodejs

相关内容