0

我正在编写一个基于 nodejs 的网络抓取工具,我设法完成了这项工作,但我想知道是否有更有效的方法来做到这一点以及如何

问题是这样的:

  • 为了加快抓取速度,我需要生成到网站的N并行 http 连接(在 http.request 或请求中默认保持活动状态)
  • 在完成抓取之前,我还有总共M个请求(任务)要做
  • M>>N,实际上M可以是无限的
  • 在我的工作中必须使用保持连接,否则我可能会被目标网站踢掉

我目前的解决方案是:

  • 初始化M个 http.request/request,它是来自M -requests(tasks)的一对一映射
  • 设置http.globalAgent.maxSockets = N
  • 让 http.globalAgent 管理连接池

完成了这项工作,没有泄漏,没有失败的请求,N个并发 http 连接,中提琴。问题在于,显然它在开始时分配了大量内存来构建M http.request。

所以我在想:

  • 还是让http.request管理连接池,keep-alive
  • 构建一个任务生成器,比如T,具有方法T获取任务()
  • 在开始时生成N个请求,触发它们
  • 一旦某个请求R完成,执行task= T .fetchTask()并将任务提供给R,重用连接,保持活动状态

但如何?谢谢大家。

4

0 回答 0