我正在试验 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.');
});
})();
我在这里做错了什么?我真的很想使用排队,因为没有它,每个传入请求似乎都会减慢所有其他请求。
慕神8447489
相关分类