首页
学习
活动
专区
圈层
工具
发布

第七十七期:Node中的streams流(pipe管道和pump泵)

我们其实也可以处理无限量的数据,比如:我们可以从伪随机数生成器中读取字节数。...从流中提取数据的另一种方法是等待readable事件,然后不断调用流的read方法,直到返回null(即流终止符实体)。通过这种方式,我们可以从流中提取数据,并且可以在必要时停止提取。...从可读流中读取新数据时触发。data数据作为事件处理程序的第一个参数。需要注意的是,与其他事件处理程序不同,附加数据侦听器会产生副作用。当连接第一个数据侦听器时,我们的流将被取消暂停。....tar.gz | node read.js > edon.tar.gz pipe方法将数据侦听绑定到streams流的源头,然后将接收到的数据导流到目标streams中。...比如,当快速生成数据的流可能会压到较慢的写入流时,需要使用缓冲压力策略来防止内存填满和进程崩溃。管道方法提供了这种背压。

1.2K30

Node.js快速入门

这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。...Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。...[root@hadron stream]# cat output.txt www.hadron.cn[root@hadron stream]# 9.3 管道流 管道提供了一个输出流到输入流的机制。...JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的。...对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。

12.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Node.js Stream

    Stream是一个抽象接口,Node中很多对象实现了这个接口,例如:http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)。...所有的Stream对象都是EventEmitter的实例。...常用的事件有: data-当有数据可读时触发  end-没有更多的数据可读时触发  error-在接收和写入过程中发生错误时触发  finish-所有数据已被写入到底层系统时触发。...从流中读取数据 var fs = require("fs"); var data = ''; //创建可读流 var readerStream = fs.createReadStream('input.txt...readerSteam.pipe(writerStream); console.log("程序执行完毕"); 链式流 链式是通过连接输出流到另一个流并创建多个操作链的机制,链式流一般用于管道操作。

    49430

    一篇文章弄明白Node.js与二进制数据流

    JavaScript 中可以使用 charCodeAt 方法获取字符对应的 ASCII: ?...除了ASCII外,还有一些其他的编码方式来映射不同字符,比如我们使用的汉字,通过 JavaScript 的 charCodeAt 方法得到的是其 UTF-16 的编码。 ?...使用 Stream 会一边读取 data.json 一边将数据写入响应流,而不是像 Buffer 一样,先将整个 data.json 读取到内存,然后一次性输出到响应中,所以使用 Stream 的时候会更加节约内存...另外,也可以通过事件来监听数据的流动。不管是文件的读写,还是 http 的请求、响应都会在内部自动创建 Stream,读取文件时,会创建一个可读流,输出文件时,会创建可写流。...,Node.js 在 http 响应时,需要调用 .end() 方法来结束响应,其实内部就是一个可写流。

    3.7K30

    JavaScript 编程精解 中文第三版 二十、Node.js

    传递给 HTTP 服务器回调的request绑定,以及传递给 HTTP 客户端回调的response对象都是可读流(服务器读取请求并写入响应,而客户端则先写入请求,然后读取响应)。...读取流需要使用事件处理器,而不是方法。 Node 中发出的事件都有一个on方法,类似浏览器中的addEventListener方法。...我们将一段段地构建程序,使用名为methods的对象来存储处理多种 HTTP 方法的函数。方法处理器是async函数,它接受请求对象作为参数并返回一个Promise,解析为描述响应的对象。...当body的值是可读流时,它将有pipe方法,用于将所有内容从可读流转发到可写流。 如果不是,则假定它是null(无正文),字符串或缓冲区,并直接传递给响应的end方法。...当路径不起始于基本目录时,该函数将使用 HTTP 状态码来抛出错误响应对象,该状态码表明禁止访问资源。 我们需要创建GET方法,在读取目录时返回文件列表,在读取普通文件时返回文件内容。

    2.4K40

    邂逅Node.JS的那一夜

    下面让我们深入了解Node.JS吧Buffer 缓冲器:JavaScript 语言没有用于读取或操作二进制数据流的机制,NodeJS提供了一个Buffer内置对象对二进制数据的操作:Buffer 是一个类似于数组的对象...,普通读取一次性读取是直接读进内存的,如果文件1G则等于1G内存,==很容易内存溢出⛲==常用方法:删除在 Node.js 中,我们可以使用 unlink 或 unlinkSync 来删除文件,node14.4...:方法接受一个回调函数,这个回调函数会在每次有 HTTP 请求时被调用,回调函数接收两个参数request: 意为请求,是对请求报文的封装对象,通过request对象可以获得请求报文的数据response...; })NodeJS HTTP解析请求路径——方式二: 实例化URL的对象解析;new URL() 方法在浏览器环境和 Node.js 环境中的行为可能有一些差异,具体取决于具体的使用场景/** 实例化...|方法、response对象可以设置响应报文设置响应头|行|体在Node.js 中,当你使用 http 模块创建一个服务器时,如果不显式设置响应头,Node会提供一组默认的响应头,Node也提供属性根据需求自定义

    34310

    深入理解Node.js 进程与线程(8000长文彻底搞懂)

    单线程 单线程就是一个进程只开一个线程 Javascript 就是属于单线程,程序顺序执行(这里暂且不提JS异步),可以想象一下队列,前面一个执行完之后,后面才可以执行,当你在使用单线程语言编码时切勿有过多耗时的同步操作...send()方法在将消息发送到IPC管道前,实际将消息组装成了两个对象,一个参数是hadler,另一个是message。...这个message对象在写入到IPC管道时,也会通过 JSON.stringfy()进行序列化。...连接了IPC通道的子线程可以读取父进程发来的消息,将字符串通过JSON.parse()解析还原为对象后,才触发message事件将消息传递给应用层使用。...注意下面我要说的话,Node的异步调用是由libuv来支持的,以上面的读取文件的例子,读文件实质的系统调用是由libuv来完成的,Node只是负责调用libuv的接口,等数据返回后再执行对应的回调方法。

    2.8K10

    深入理解Node.js 进程与线程(8000长文彻底搞懂)

    单线程 单线程就是一个进程只开一个线程 Javascript 就是属于单线程,程序顺序执行(这里暂且不提JS异步),可以想象一下队列,前面一个执行完之后,后面才可以执行,当你在使用单线程语言编码时切勿有过多耗时的同步操作...send()方法在将消息发送到IPC管道前,实际将消息组装成了两个对象,一个参数是hadler,另一个是message。...这个message对象在写入到IPC管道时,也会通过 JSON.stringfy()进行序列化。...连接了IPC通道的子线程可以读取父进程发来的消息,将字符串通过JSON.parse()解析还原为对象后,才触发message事件将消息传递给应用层使用。...注意下面我要说的话,Node的异步调用是由libuv来支持的,以上面的读取文件的例子,读文件实质的系统调用是由libuv来完成的,Node只是负责调用libuv的接口,等数据返回后再执行对应的回调方法。

    1.1K20

    JavaScript 权威指南第七版(GPT 重译)(七)

    你可能期望从网络读取和写入的函数是异步的,但 Node 更进一步,为从本地文件系统读取和写入文件定义了非阻塞异步函数。...接下来的小节演示了如何从 Node 的流类中读取和写入。 16.5.1 管道 有时,您需要从流中读取数据,然后将相同的数据写入另一个流。...攻击者可以编写一个 HTTP 客户端,发起对大文件(如图像)的请求,但实际上从未读取请求的主体。由于客户端没有从网络中读取数据,而服务器也没有响应背压,服务器上的缓冲区将会溢出。...IncomingMessage 对象是一个可读流,你可以使用本章前面演示的技术从中读取响应正文。...接下来的代码创建了一个简单的 HTTP 服务器,从本地文件系统提供静态文件,并实现了一个调试端点,通过回显客户端的请求来响应。

    68410

    深入理解Node.js 进程与线程(8000长文彻底搞懂)

    单线程 单线程就是一个进程只开一个线程 Javascript 就是属于单线程,程序顺序执行(这里暂且不提JS异步),可以想象一下队列,前面一个执行完之后,后面才可以执行,当你在使用单线程语言编码时切勿有过多耗时的同步操作...send()方法在将消息发送到IPC管道前,实际将消息组装成了两个对象,一个参数是hadler,另一个是message。...这个message对象在写入到IPC管道时,也会通过 JSON.stringfy()进行序列化。...连接了IPC通道的子线程可以读取父进程发来的消息,将字符串通过JSON.parse()解析还原为对象后,才触发message事件将消息传递给应用层使用。...注意下面我要说的话,Node的异步调用是由libuv来支持的,以上面的读取文件的例子,读文件实质的系统调用是由libuv来完成的,Node只是负责调用libuv的接口,等数据返回后再执行对应的回调方法。

    1.2K30

    Node 中核心API的使用

    (path); 以文件流的方式写入数据 21. readerStream.pipe(writeStream); 管道提供了一个输出流到输入流的机制,通常我们用于从一个流中获取数据并将数据传递到另外一个流中...http.get 和 http.request,功能是作为客户端向http服务器发起请求; 常用的方法如下: (1). setEncoding( ) 设置响应格式; (2). setTimeout(time...data 收到数据后的响应事件; (2). err  链接产生错误时的事件; GET请求方法 POST请求方法 2. http.Server  编写服务器端程序; 常用的方法如下: (1). listen...','*'); 当使用 setHeader( )设置响应头时,它们将与传给 writeHead( ) 的任何响应头合并, 其中writeHead( ) 的响应头优先。...使用createConnection()方法创建连接对象; 2.

    2.2K20

    Node·七天学会 NodeJS

    stream 模块提供了一些 API,用于构建实现了流接口的对象。Node.js 提供了多种流对象。例如,HTTP 服务器的请求和 process.stdout 都是流的实例。...,都可以当作数据流来操作; url.parse 方法加上 request.url 属性是处理 HTTP 请求时的固定搭配; 使用 zlib 模块可以减少使用 HTTP 协议时的数据传输量; 通过 net...然后,服务器会读取请求的文件,并按顺序合并文件内容。最后,服务器返回响应,完成对一次请求的处理。 另外,服务器在读取文件时的根目录和服务器监听的 HTTP 端口可以配置。...由于每次响应输出的数据都需要先完整地缓存在内存里,当服务器请求并发数较大时,会有较大的内存开销。 对于问题一,很容易想到把读取文件的方式从串行改为并行。...并且在读取文件时,使用了只读数据流来简化代码。 第三次迭代 从工程角度上讲,没有绝对可靠的系统。即使代码没有 BUG,也可能因为操作系统,甚至是硬件导致服务器程序在某一天挂掉。

    2.3K20

    关于Node.js streams你需要知道的一切

    注意这些对象是有很密切的关联的。当一个客户端的HTTP 响应对象是一个可读流,那么在服务器端这就是一个可写流。...因为在HTTP例子中,我们通常是从一个对象(http.IncomingMessage)读取再写入到另外一个对象(http.ServerResponse)中去。...还要注意,当涉及到子进程时,stdio流(stdin,stdout,stderr)具有逆流类型。这就允许我们非常方便的使用管道从主进程连接子进程的Streams。...当一个可读流是暂停模式的时候,我们可以使用read方法从流中读取。但是当一个流是流动模式的时候,数据是持续的流动,我们需要使用事件去监听数据的变化。...,我们可以使用这个duplex流读取从A-Z的字母也同样可以使用它的打印功能。

    1.2K30

    Node.JS环境,Express服务器实现GZIP压缩传输

    Node.js是一种基于Chrome V8 JavaScript引擎的开源、跨平台而且异步事件驱动的运行时环境,可以让JavaScript代码在服务器端运行。...这篇文章将介绍如何使用Node.js和Express来实现Web服务器并使用fs模块读取文件,并将其gzip压缩后传递给客户端。...步骤1: 安装Node.js和Express首先,需要在本地计算机上安装Node.js。可以从Node.js官网下载并安装最新版本的Node.js。接下来,需要安装Express。...如果不使用流,可以使用fs模块中的readFile函数读取文件,然后使用zlib模块中的gzip函数对文件内容进行压缩,并将压缩后的数据作为响应发送给客户端。...在响应中设置相应的头信息后,使用res.send函数将压缩后的数据作为响应发送给客户端。需要注意的是,这种方法会在内存中保存整个文件内容,并且无法处理大型文件。因此,最好使用流来处理大型文件。

    1.5K20

    15 个常见的 Node.js 面试问题及答案

    执行 CPU 密集型任务的应用程序(如复杂的数学计算)在使用 CPU 时表现不佳,因为 Node.js 是单线程的。...Node.js 中任何对象发出的事件都是 EventEmitter 类的实例,就像 http 模块。...Node.js 在任务完成时通过回调来处理异步函数返回的响应。与创建任务的事件类似,任务完成后也会发出一个事件。Node.js 将需要处理的事件添加到事件队列。...事件循环对事件队列中的事件进行迭代,并安排何时执行其关联的回调函数。 5. 流是什么? Stream 流是从源读取或写入数据并将其传输到连续流目标的管道。...同时,事件循环遍历事件队列中的每个事件,并调用附加的回调来处理事件响应。 这就是 Node.js 中所使用的反应堆模式。 10. 单线程与多线程网络后端相比有哪些好处?

    2.1K20

    【Node.js】1430- 15 个常见的 Node.js 面试问题及答案

    执行 CPU 密集型任务的应用程序(如复杂的数学计算)在使用 CPU 时表现不佳,因为 Node.js 是单线程的。...Node.js 中任何对象发出的事件都是 EventEmitter 类的实例,就像 http 模块。...Node.js 在任务完成时通过回调来处理异步函数返回的响应。与创建任务的事件类似,任务完成后也会发出一个事件。Node.js 将需要处理的事件添加到事件队列。...事件循环对事件队列中的事件进行迭代,并安排何时执行其关联的回调函数。 5. 流是什么? Stream 流是从源读取或写入数据并将其传输到连续流目标的管道。...同时,事件循环遍历事件队列中的每个事件,并调用附加的回调来处理事件响应。 这就是 Node.js 中所使用的反应堆模式。 10. 单线程与多线程网络后端相比有哪些好处?

    2.1K20

    Nodejs 中的 Stream

    六、流的工作过程 数据源 ——> 管道 ——> 缓冲区 ——> 目的地 1.readable 从数据源 file 读取数据 1) 创建的可读流对象可是二进制模式(buffer|string) 或者 普通对象模式...4) 消费流的时候会读取缓冲区的数据,缓冲区数据被消耗完之后会再次触发 onreadable 事件。 read()方法会从内部缓冲区中拉取并返回若干数据,没有更多可用数据时,会返回null。...当缓冲器中数据达到 highWaterMark 的值时,会暂停从底层资源读取数据(readable._read),直到当前缓冲器中数据被消费完。...[kFs]就是 fs 模块对象,调用 fs.read 方法实现选择性读取文件数据块。 通过分析可知,_read方法其实就是一个少量多次读取文件的实现方式。...Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。

    2.6K10
    领券