2015-07-21 71 views
0

我是nodejs的新手,有关于文件下载场景的问题。节点Js下载操作

我知道节点使用单线程事件循环响应服务。当请求下载时,请求被推送到异步回调队列,直到结果(文件数据)准备好发送给请求用户。

  1. 当结果写回给用户时,是通过事件循环循环完成的,还是在事件循环之外以不同的方式完成?

  2. 如果在大文件的情况下不采取预防措施,这种操作会阻塞服务器吗?如果这可能导致问题,我们如何处理这种情况?

回答

0

Node中这个问题的正常方法是streams。流就像可以发送和/或接收数据的UNIX管道。使用fs.createReadStream将创建一个从文件读取的流。在该流上调用pipe可以吸收来自该文件的所有数据并将其推送到等待数据接收器;在你的例子中,这将是服务器请求。然后,在您不必担心的情况下,读取器流将读取数据并引发该流将尽职管理至作者流的事件。

这里是一个stream tutorial,涵盖了更多细节。

+0

因此,如果没有'流'功能,该网站将在下载期间被封锁? – Chandan

+0

表述方式不同,Node可以通过阻塞的方式来执行该操作。节点可以做到以非阻塞的方式。流是在Node中使其异步的习惯用法。您可以从文件中捕获数据事件,并将它们自己发送到响应中(这是流真正为您做的)。您也可以同步读取_would_块中的文件。 –