我正在尝试使用 Puppeteer Cluster,但我只是不明白如何正确使用排队。它只能用于不等待响应的呼叫吗?我正在使用 Artillery 同时触发一堆请求,但是当我直接执行命令时它们都失败了,而只有一些失败了。
我直接从示例中获取代码并替换execute
为queue
我期望工作的代码,除了代码不等待结果。有没有办法实现这一目标?
所以这有效:
const screen = await cluster.execute(req.query.url);
但这打破了:
const screen = await cluster.queue(req.query.url);
这是完整的示例queue
:
const express = require('express');
const app = express();
const { Cluster } = require('puppeteer-cluster');
(async () => {
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
maxConcurrency: 2,
});
await cluster.task(async ({ page, data: url }) => {
// make a screenshot
await page.goto('http://' + url);
const screen = await page.screenshot();
return screen;
});
// setup server
app.get('/', async function (req, res) {
if (!req.query.url) {
return res.end('Please specify url like this: ?url=example.com');
}
try {
const screen = await cluster.queue(req.query.url);
// respond with image
res.writeHead(200, {
'Content-Type': 'image/jpg',
'Content-Length': screen.length //variable is undefined here
});
res.end(screen);
} catch (err) {
// catch error
res.end('Error: ' + err.message);
}
});
app.listen(3000, function () {
console.log('Screenshot server listening on port 3000.');
});
})();
我在这里做错了什么?我真的很想使用排队,因为没有它,每个传入的请求似乎都会减慢所有其他请求的速度。