多年来,Node.js开发人员创建了许多包,目的是使流的使用更容易。什么是Node.js流?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)如何保持反向流类型。这允许开发人员采用非常简单的方法从主进程stdio流传输到这些流。
