【发布时间】:2019-03-16 02:31:17
【问题描述】:
我使用 puppeteer & node js (express) 创建了爬虫。这个想法是当服务器收到 http 请求时,我的应用程序将开始抓取页面。
问题是如果我的应用程序一次收到多个 http 请求。抓取过程将一遍又一遍地开始,直到没有 http 请求命中。我如何只启动一个 http 请求并将另一个请求排队,直到第一个抓取过程完成?
目前,我用下面的代码尝试了node-request-queue,但没有运气。
var express = require("express");
var app = express();
var reload = require("express-reload");
var bodyParser = require("body-parser");
const router = require("./routes");
const RequestQueue = require("node-request-queue");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8080;
app.use(express.static("public")); // static assets eg css, images, js
let rq = new RequestQueue(1);
rq.on("resolved", res => {})
.on("rejected", err => {})
.on("completed", () => {});
rq.push(app.use("/wa", router));
app.listen(port);
console.log("Magic happens on port " + port);
【问题讨论】:
-
为什么要将路由器推入请求队列?
-
那么如何正确的做请求队列呢?对不起,我是新来表达的
-
你能显示你实际刮板的代码吗?
-
使用 RabbitMq 作为消息代理,并使您的抓取进程成为消费者。