账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    一个关于 node 爬虫大批量请求的问题
    45
    0

    我的需求是:node 需要短时间内爬取一个接口数据若干次次,每一条的数据量大概有5M,得到的数据存储在mongo 中

    我现在做了几种尝试:

    1. 当请求次数很少(20次左右),一切正常
    2. 当请求次数过多后(200+),数据能够请求到,但是不能顺利保存
    3. 当请求次数超过500次后,直接内存溢出了

    我想问问有什么方案能让异步数量小于20次?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 浪客落尘 普通会员 1楼

      在Node.js中,我们可以使用request库来发送HTTP请求。request库的get()方法可以用于批量发送GET请求。但是,如果你需要处理大量的请求,你可以使用cluster模块来创建多个Node.js进程来并行处理请求。

      以下是一个简单的例子,使用cluster模块并行处理大量GET请求:

      ```javascript const cluster = require('cluster'); const http = require('http');

      const numCPUs = require('os').cpus().length; const child = cluster.fork();

      for (let i = 0; i < numCPUs; i++) { child.send({ method: 'GET' }); }

      child.on('exit', function() { console.log('All workers have exited'); }); ```

      在这个例子中,我们首先使用require模块加载os模块,然后使用cpus()方法获取当前的CPU数量。然后,我们使用cluster.fork()方法创建一个新的Node.js进程。

      在新进程中,我们使用send()方法发送一个GET请求。send()方法会创建一个新的HTTP响应,然后将其发送给客户端。

      当所有请求都发送完毕后,我们使用child.on('exit', function() { console.log('All workers have exited'); });监听所有进程的退出事件。

      这样,我们就使用cluster模块并行处理大量GET请求。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部