济南网络平台设计,优化手机网站,建筑八大员报考时间和条件,为网站做电影花絮在 NodeJs 中#xff0c;流随处可见#xff0c;读/写文件流#xff0c;HTTP请求/返回流#xff0c;stdin/stdout流。理解并运用好流会让你的Node更具力量。Streamlib/_stream_readable.jslib/_stream_writable.jslib/_stream_tranform.jslib/_stream_duplex.js流主要有可读…在 NodeJs 中流随处可见读/写文件流HTTP请求/返回流stdin/stdout流。理解并运用好流会让你的Node更具力量。Streamlib/_stream_readable.jslib/_stream_writable.jslib/_stream_tranform.jslib/_stream_duplex.js流主要有可读 Readable可写流 Writable双工可读可写流 Duplex Transform 流就是继承 Duplex 的。通过pipe管道可读流可以pipe到一个或多个可写流。看源码能发现里面涉及了一堆状态控制的代码什么时候读什么时候写什么时候暂停读。大部分情况下程序面对的问题。通常都可以抽象成一个输入/输出的问题中间可能会包含转换。实际问题怎么运用流呢。读取大文件小文件可以一次性读到内存但如果一个 10G 的文件呢ReadLine 模块很好用但是你知道背后怎么实现的吗。试试怎么用 stream.Transform 来自己实现一个readLineconst 通过实现一个消费/可写流我们就可以来对大文件进行处理比如说实现一个 word count 计数器 从文件导入到数据库。而不用担心需要一次性读取整个文件到内存里out of memory这种问题。通过继承 strean 模块我们也不需要过多的去考虑什么时候该读什么时候因为写的压力大背压该停止读让整个读写流有序的运行。你只需要专注于实现你自己的 write read transformSpark, Strom 的实时计算流也是这样的大任务分解成小任务只需要专注于自己业务逻辑的 mapreduce单机爬虫再举个栗子, 它的输入可能是一堆 URL、输出是结构化的数据。需要写入到关系型数据库。可以把 URL 数据获取抽象成一个可读流爬取过程数据提取抽象成一个 transform 流写入数据库抽象成一个可写流只需要约定好每个过程输出的数据模型就可以在每个过程实现各种目的不一样的流。如数据源可以是读取文件MYQL分布式列队抓取转换流可以是普通的 HTTP爬虫Puppeteer 可渲染性爬虫数据存储流可以写文件MYQL或者HDFSread transform write这样程序看起来是不是特别简洁URL 读取流const 把 URL 的变成结构化数据的转换流const mysql 入库写入流// mysql表模型
是不是简洁明了在Node中异步流随处可见谁让它基因就是这样呢。参考https://nodejs.org/api/stream.htmlhttps://www.barretlee.com/blog/2017/06/06/dive-to-nodejs-at-stream-module/https://nodejs.org/en/docs/guides/backpressuring-in-streams/