我是nodejs的新手,对于文件下载方案有疑问。
我知道节点使用单线程事件循环响应服务。当请求下载时,请求被推送到异步回调队列,直到结果(文件数据)准备好发送给请求用户。
当结果写回给用户时,这是通过事件循环周期完成的,还是在事件循环之外以不同方式完成?
如果大文件没有采取预防措施,这种操作是否会阻止服务器?如果这可能导致问题,我们如何处理这种情况?
答案 0 :(得分:0)
Node中此问题的常规方法是streams。流类似于可以发送和/或接收数据的UNIX管道。使用fs.createReadStream
将创建从文件中读取的流。在该流上调用pipe
可以从该文件中获取所有数据并将其推送到等待的数据接收器;在您的示例中,它将是服务器请求。然后,您无需担心,读取器流将读取数据并引发流将尽职尽责地传输到写入器流的事件。
这里有一个stream tutorial,可以更详细地介绍它。