node.js - 客户的 Kue 作业进度

标签 node.js heroku redis message-queue kue

我正在运行一个 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 })
}

最佳答案

任何时候你的工作可能需要 > 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);

关于node.js - 客户的 Kue 作业进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373978/

相关文章:

node.js - 在 Web 应用程序的内存中存储复杂对象?

windows - Windows 任务管理器和任务列表中显示不同的内存使用情况

node.js - Mongoose 聚合,在产品匹配时找到产品的祖先

javascript - NodeJS - 为什么包裹在函数中的 for 循环比不包裹时更快?

javascript - 使用 Graphql 查询的 Node 获取发布请求

ruby-on-rails - Rails 教程 sample_app 在 Heroku 中失败并显示日志:ActionController::RoutingError(没有路由匹配 [GET] "/about"):

ruby-on-rails - 在 Heroku 上为 Rails 4.2 应用程序正确配置 Postgres 数据库

node.js - 如何在node.js和nightmare.js中使用超出其范围的变量(网络抓取)

python - 一个应用程序中的 discord bot 和 websocket 服务器

node.js - nodejs并发下如何正确使用redis的GET SET命令?