nodejs的某些api~(一)node的流1
根据心情整理一些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的更多相关文章
- Node.js流
什么是流? 流是可以从一个源读取或写入数据到连续的目标对象.在Node.js,有四种类型的数据流. Readable - 其是用于读操作. Writable - 用在写操作. Duplex - 其可以 ...
- vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...
- nodejs的某些api~(四)udp&dns
今天记udp/数据报套接字和dns. udp UDP/数据报套接字 => require('dgram');dgram.createServer([type],[cb]);type:可以是'ud ...
- nodejs备忘总结(一) -- node和express安装与配置,新建简单项目(附安装配置过程中遇到问题的解决方法)
安装node 本文以安装node_v8.9.0为例(win10环境),下载node-v8.9.0-x64.msi插件 下载后,安装,安装目录默认为C:\Program Files\nodejs 配置环 ...
- 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 ...
- nodejs的某些api~(一)node的流2
可写流writablewritable.write(chunk, [encoding], [callback])chunk {String | Buffer} 要写入的数据encoding {Stri ...
- Node与apidoc的邂逅——NodeJS Restful 的API文档生成
作为后台根据需求文档开发完成接口后,交付给前台(angular vue等)做开发,不可能让前台每个接口调用都去查看你的后台代码一点点查找.前台开发若不懂你的代码呢?让他一个接口一个接口去问你怎么调用, ...
- node api 之:stream - 流
stream 模块可以通过以下方式使用: const stream = require('stream'); 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. ...
- nodejs的某些api~(五) HTTP模块
HTTP的模块是nodejs最重要的模块(应该是),最近在看HTTP权威指南,重新过了一遍http协议和web客户端.再来看这个http. HTTP构建于TCP之上,属于应用层协议,继承自tcp服务器 ...
随机推荐
- java 工厂模式 转载
下面介绍三种设计模式,简单工厂模式,工厂方法模式,抽象工厂模式 思考如下场景: 有一天,林同学准备去买笔记本,他到商城发现有两款电脑他特别喜欢, 一款是 Macbook Pro, 另一款是 Surfa ...
- ssm项目跨域访问
最近使用ssm开发了一个项目,为了项目的开发速度,采用的是前后端同时开发,所以前端文件没有集成在项目中,最后在调试时涉及到了跨域.跨域的解决方法很多,我采用的是最简单的一种,代码如下: 新建一个过滤器 ...
- Sublime Text3 配置 NodeJs 开发环境
题外话:使用visual studio开发NodeJs也是很方便,只需要安装插件即可. 本着对Sublime Text3的喜爱,尤其是最近更新后,界面和功能上感觉更nice了,那就配置一发环境吧! ( ...
- Vue 刷新当前页面,并重新加载页面数据
业务场景:在管理后台,在执行完,增,删,改,操作的时候.我们需要刷新一下页面,重载数据.在JQ中我们会用到location.reload()方法,刷新页面:在vue中,这里需要用到一个 provide ...
- 简单JQuery+AJAX+Servlet的计算器实现
index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- socket FTP-1
基于socket实现文件的传输以及md5验证 server: import socket import os import hashlib server=socket.socket() server. ...
- elasticsearch介绍,安装,安装错误解决及相应插件安装
一.elasticsearch介绍 1.简介(使用的是nosql,更新比mongodb慢): ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎, ...
- JQ查找到带有某个字符,并起类名,然后替换这个某个字符
<script> setTimeout("asdasd()",1000); //定时器是为了防止其他JS影响到它,可以不加 function asdasd() { $( ...
- python数据结构算法学习自修第一天【数据结构与算法引入】
1.算法引入: #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from Queue import Queue import time que = Queu ...
- delphi怎样在关闭程序时弹出窗口?
我想在关闭delphi编译的程序时,弹出“您是否确实要退出的窗口”点击否不退出,是退出 在主窗体的CloseQuery事件里,使用messagebox进行提示,根据选择的按钮对Canclose进行设置 ...