0

我正在运行一个 Heroku 应用程序,其中有一个后台工作人员使用 Kue 处理作业。因为 heroku 终止并重新启动任何需要超过 30 秒的请求,所以我最终将响应发送回客户端jobs.create()(在完成之前)。

由于其中一些工作需要几分钟才能完成,从客户那里检查进度的最佳方法是什么?

到目前为止,我能看到的最佳解决方案是将作业 ID 发送回客户端,然后每 x 秒检查一次作业进度:

var job = jobs.create(type, data).save(function () {
   res.send(200, job.id);
});
...
kue.Job.get(id, function (err, job) {
   res.send({ progress: job._progress, state: job._state })
}
4

1 回答 1

0

每当您有一项可能需要超过 30 秒才能完成的工作时,您可能应该进行轮询,而不是依靠一个非常长的请求来避免在某处被取消或中断。轮询对刷新的客户也更有弹性(可能,如果你的工作需要很长时间):

https://devcenter.heroku.com/articles/asynchronous-web-worker-model-using-rabbitmq-in-node#4-poll-for-changes

this.pollInterval = setInterval(poll.bind(this), 2000);
于 2015-10-27T18:17:56.977 回答