networking抓取:当使用Mikeal的node.js请求模块时,接近15%的结果是部分下载
我正在刮一个灵感画廊,并使用Mikeal的node.js request
库将图像下载到磁盘。 问题是,一大堆图像,主要是在下载会话开始,最终部分或全部下载。 这在下面的图片中显示(按Date Modified
sorting的文件夹)。 在前17张图像之后,其余的可以从第3行第4列开始下载。
以下是我使用的node.js / request代码的相关部分:
// images is an array of URLs to .jpg images for( var i = 0, len = images.length ; i < len ; i++ ) { request.get( images[i] ).pipe( fs.createWriteStream(destinationFilename) ) }
我正在使用request
从存储在images
数组中的URL中获取图像数据,并将其stream
到将数据写入磁盘的数据stream
。 大多数情况下,这个工作正常,但下载的1%到15%之间的部分下载。
我试图使用stream
对象的stream
事件来获取bytesWritten
并将其与bytesTotal
进行比较,但是这种方法没有得到我的任何地方。 还有其他方法可以解决这个问题吗?
使用asynchronous 。 您必须使用async.queue并发送具有有限并行性的请求。 你的代码正在做的是试图同时产生的images.length
数量的请求。 Node.js是非I / O阻塞。 所以你需要一些控制你产生的事件的数量。 asynchronous是你需要的软件包。
没有看到你的整个脚本,我猜你的程序在所有的请求完成之前就会终止。 正如以前所build议的那样,您可以尝试使用asynchronous库,但通过充分利用事件发送器解决scheme的asynchronous请求,可以更快地完成此任务。
希望这可以帮助!