根据心情整理一些node的api~

今天第一篇,node的流;node的流比较重要,node的流存在于node的各个模块,包括输入输出流,stdin,stout。fs读取流,zlib流,crypto流,tcp套接字等等,node很重要的net,http模块都用到了流的概念,留到以后再说。还有gulp的流也是来源于node的流。express的中间件,也被应用于各大框架……


nodejs流,所有流都是EventEmitter的实例,流包括了Readable,writable,Duplex,Transform流;这是流的分类。

Stream,数据出自一个readable流,在就绪接受之前,readable流不会发生数据。
readable流有流动模式和暂停模式(默认)两种模式;处于暂停模式时,必须明确调用stream.read()取出若干数据块。

如果没有绑定data事件处理,也没有pipe()目标,处于流动模式,数据会流失
 ·some ways change to流动模式

1,添加一个data事件监听
2,调用resume()开启数据流
3,调用pipe()将数据发送到一个writable
some ways  change to暂停模式
1,如果没有导流目标,调用pasuse()
2,如果有导流弥补,移出所有data监听器,调用unpipe()移除所有导流目标
tips:移出data监听器并不会暂停流,当有导流目标时,调用pause()并不能保证流在哪些目标排空并请求更多数据时维持暂停状态

一些可读流的例子:

客户端上的http响应
服务器上的http请求
fs读取流
zlib流
crypto流
tcp嵌套字
子进程的stdout和stderr

流的事件:

//readable事件
当一个数据块可以从流中被读出,会触发一个readable事件

var readable=getReadableStreamSomehow();
readable.on('readable',function(){
//有数据可读
})

//data事件

var readable=getReadableStreamSomehow();
readable.on('data',function(chunk){
   console.log('得到了%d字节的数据',chunk.length);
  })

后面node好多模块都可以监听data来接收事件,比如http的server,也可以用pipe()传数据给客户端。

//end事件
在没有更多数据能提供时被触发;在数据被完全消费之前不会被触发,
// close事件底层数据源被关闭时触发,不是所有流都会触发
//error事件数据接收错误触发
//readable.read([size])

read()从内部缓存区中拉取返回若干数据,没有更多数据时会返回null,指定size会返回相当字节的数据
仅在暂停模式时被调用

var readable=getReadableStreamSomehow();
readable.setEncoding('utf8')
readable.on('readable',function(){
var chunk;
while(null!==(chunk=readable.read())){
console.log('得到了%d字节的数据',chunk.length);
}
})

  

//readable.setEncoding(encoding)
//readable.resume()返回this可以让可读流继续触发data事件
//readable.pause()让处于流动模式的流停止触发data事件,切换到非流动模式,并让都需可用数据留在内部缓冲区
//readable.pipe(destination,[options])写入数据的目标;导流选项options,end在读取者结束时结束写入者,缺省为true
=>可以从可读流中拉取所有数据,并写入到所提供的目标,该方法能自动控制流量以避免目标被快速读取的可读流淹没

var readable=getReadableStreamSomehow();
var writable=fs.createWriteStream('files.txt');
readable.pipe(writable);//返回目标流

//readable.unpipe()就不说了-0-前面提到了。

nodejs的某些api~(一)node的流1的更多相关文章

  1. Node.js流

    什么是流? 流是可以从一个源读取或写入数据到连续的目标对象.在Node.js,有四种类型的数据流. Readable - 其是用于读操作. Writable - 用在写操作. Duplex - 其可以 ...

  2. vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版

    vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...

  3. nodejs的某些api~(四)udp&dns

    今天记udp/数据报套接字和dns. udp UDP/数据报套接字 => require('dgram');dgram.createServer([type],[cb]);type:可以是'ud ...

  4. nodejs备忘总结(一) -- node和express安装与配置,新建简单项目(附安装配置过程中遇到问题的解决方法)

    安装node 本文以安装node_v8.9.0为例(win10环境),下载node-v8.9.0-x64.msi插件 下载后,安装,安装目录默认为C:\Program Files\nodejs 配置环 ...

  5. ASP.NET Web Api vs Node.js Benchmark

    http://mikaelkoskinen.net/post/asp-net-web-api-vs-node-js-benchmark ASP.NET Web Api vs Node.js Bench ...

  6. nodejs的某些api~(一)node的流2

    可写流writablewritable.write(chunk, [encoding], [callback])chunk {String | Buffer} 要写入的数据encoding {Stri ...

  7. Node与apidoc的邂逅——NodeJS Restful 的API文档生成

    作为后台根据需求文档开发完成接口后,交付给前台(angular vue等)做开发,不可能让前台每个接口调用都去查看你的后台代码一点点查找.前台开发若不懂你的代码呢?让他一个接口一个接口去问你怎么调用, ...

  8. node api 之:stream - 流

    stream 模块可以通过以下方式使用: const stream = require('stream'); 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. ...

  9. nodejs的某些api~(五) HTTP模块

    HTTP的模块是nodejs最重要的模块(应该是),最近在看HTTP权威指南,重新过了一遍http协议和web客户端.再来看这个http. HTTP构建于TCP之上,属于应用层协议,继承自tcp服务器 ...

随机推荐

  1. day 7-5 守护线程

    一. 守护线程 无论是进程还是线程,都遵循:守护进程(线程)会等待主进程(线程)运行完毕后被销毁. 需要强调的是:运行完毕并非终止运行. 1.对主进程来说,运行完毕指的是主进程代码运行完毕. 2.对主 ...

  2. C# Note24: 指针的使用

    C#为了类型安全,默认并不支持指针.但是也并不是说C#不支持指针,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式.在不安全模式下,我们可以直接操作内存,这样就可以使用 ...

  3. RandomStringUtils

    System.out.println(RandomStringUtils.random(5));//随机多少个随机字符中文环境乱码 System.out.println(RandomStringUti ...

  4. png8、16、24、32位的区别

    我们都知道一张图片可以保存为很多种不同的格式,比如bmp/png/jpeg/gif等等.这个是从文件格式的角度看,我们抛开文件格式,看图片本身,我们可以分为8位, 16位, 24位, 32位等. 单击 ...

  5. java学习之—链表(1)

    /** * 单链表操作 * Create by Administrator * 2018/6/14 0014 * 下午 2:05 **/ public class Link { public int ...

  6. 为linux主机增加file description

    在benchmarked写的服务器的时候就遇到了too many file open 这个报错. 由于遇到过很多次了,所以知道应该是单机fd打满了. 首先来看看 机器最多支持多少fd cat /pro ...

  7. shell expr用法

    expr 计算整数变量值 使用方法如下: linux-zpycfm:/home/test/shell # s=+ -bash: +: command not found linux-zpycfm:/h ...

  8. saltstack二

    配置管理 haproxy的安装部署 haproxy各版本安装包下载路径https://www.haproxy.org/download/1.6/src/,跳转地址为http,改为https即可 创建相 ...

  9. linux下更改MySQL数据库存储路径

    参考地址:1.https://blog.csdn.net/ArnoBM/article/details/83008212 2.http://www.cnblogs.com/lyongde/p/3725 ...

  10. Linux CentOS7 开启80,443端口外网访问权限

    一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常) firewall-cmd --state 二.开启端口外网访问 1.添加端口 返回 success 代表成功(--permane ...