多年来,Node.js 开发人员创立了许多包,其目标是让应用流变得更容易。
什么是 Node.js Stream?
Node.js 应用程序由单个过程运行,无需为每个申请创立新线程。Node 在其规范库中提供了一组异步 I/O 原语,能够避免 JavaScript 代码阻塞,通常,Node.js 中的库是应用非阻塞范例编写的,使阻塞行为成为异样而不是失常行为。
流是数据的汇合——就像数组或字符串一样。不同之处在于流可能不会一次全副可用,也就是说,它们不用一次行加载到内存中。这使得流在解决 大量数据
或一次来自内部源的数据时十分弱小。
然而,流不仅仅是解决大数据。它们还赋予了咱们代码中可组合性的力量。就像咱们能够通过管道传递其余较小的 Linux 命令来组成弱小的 linux 命令一样,咱们能够在 Node 中应用流执行完全相同的操作。
Node 中的许多内置模块都实现了流接口,上面是一些例子:
下面的列表有一些原生 Node.js 对象的示例,这些对象也是可读和可写的流。其中一些对象既是可读流又是可写流,例如 TCP 套接字、zlib 和加密流。
请留神,这些对象彼此之间也密切相关。尽管 HTTP 响应是客户端上的可读流,但它是服务器上的可写流。这是因为在 HTTP 案例中,咱们基本上从一个对象 (http.IncomingMessage) 读取并写入另一个对象 (http.ServerResponse)。
另外请留神,当波及到子过程时,stdio 流(stdin、stdout、stderr)是如何保护顺流类型 (inverse Stream Type) 的。这容许开发人员采取一种非常简单的办法,从主过程 stdio 流与这些流进行管道传输。