我正在构建具有节点/快速后端的应用程序。由于计算量大(花费1-2分钟),端点的响应时间非常长。 Heroku在30秒让我厌烦。
我正在使用Kue和redis来完成redis中的计算。
一点伪 1.当用户点击端点时 2.开始工作 3.调用作业后发送响应,以确保不会超时 4.作业完成后,响应/发送完成的作业/数据=>,它将进入redux。
到目前为止,这是我的代码:
const redis = require('redis');
const client = redis
.createClient();
const kue = require('kue');
const queue = kue.createQueue();
router.post('/endpoint', (req, res) => {
const param = req.body.param;
var job = queue
.create('job', param)
.priority('high')
.save(err => {
if (err) {
console.log('failed');
process.exit(0);
return;
}
job.on('complete', result => {
res.send(result);
console.log('completed');
});
job.on('failed', errorMessage => {
console.log(errorMessage);
process.exit(0);
});
});
queue.process('job', async (job, done) => {
// heavy heavy computation
// heavy heavy heavy heavy
// heavy heavy heavy
//output is results => passed into promise
done(null, await Promise.all(results));
});
res.json({ message: 'job in progress' });
});
此代码的问题在于,一旦设置了标头响应,便无法发送。我对Redis以及对Kue和背景的工作非常陌生。我已经读过Webhooks可以提供帮助,但是我对Webhooks也没有太多经验。
提前谢谢!