nodejs 并行下载文件问题

先说一下逻辑。
是这样的,项目需要下载远程目录里的一个文件夹,远程服务器丢回来的是一个数组,数组是这样的形式

data:[{
name:xxx,
url:"http://xxx.xxx/xx/xx.jpg"
},...]

我拿到这个数组首先想到的是遍历它,然后依次request + pipe它就可以了,相当于下载完一个,回调下一个,出错就直接终止,没有任何问题。

为了加快速度,最大利用带宽,我就想到了同时发起多个请求,像这样

// 确定开启的线程数
let threadNum = 10
for (var i = 0; i < threadNum; i++) {
    downloadfiles(i, fileArr)
}

downloadfiles是一个递归算法,这里我就不多讲了,总之就是同时发起10个请求,把文件下载完成。我所设想的是,如果下载失败会重新调用重新下载。超过3次就自动挂起,让所有下载终止,并告诉用户下载失败检查网络环境。。

然后问题就来了。。。。如果其中的一个下载线程失败了,我如何才能让其它的下载线程终止呢?

我用的是request库,真的要做也不是不行,就是for循环一次把所有request的对象abort(),但总觉得不那么正常,而且会有点问题。

之后想到用node的child_process也许可行,但是我需要给子进程传文件的队列,这里就不怎么了解了。

各路大神给点建议。。。

阅读 3.8k
1 个回答

已用child_process解决。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题