【问题标题】:Background job on heroku how does the web know it's finishedheroku 上的后台工作网络如何知道它已经完成
【发布时间】:2012-02-29 09:02:44
【问题描述】:

所以,我正在创建这个应用程序,它有时需要提取提要,并且由于 xml 解析器需要时间,所以它在 heroku 上总是超时。因此,每次加载页面时,我都会更改为通过 Ajax 进行异步加载。我仍然从我的 Ajax 调用中收到 H12 错误。现在我正在考虑使用 Resque 在后台运行该作业。我可以做到这一点没问题,但我怎么知道工作已经完成,所以我可以通过 AJAX 将处理后的提要拉到 html 页面上?

不确定我的问题是否清楚,那么 Web 层如何知道工作已完成并且它应该发出信号(例如,在 javascript 中为 onComplete)以填充页面上的内容?

【问题讨论】:

标签: javascript ajax heroku sinatra resque


【解决方案1】:

有很多方法可以做到这一点

  • JavaScript 可以使用 AJAX 轮询服务器以获取结果,并且服务器可以以“尚未”或结果进行响应。你一直在问,直到得到结果。

  • 您可以看看 Juggernaut (http://juggernaut.rubyforge.org/),它可以让您的服务器推送到客户端

  • Web Sockets 是处理该问题的 HTML5 方法。周围有一些宝石可以帮助您入门Best Ruby on Rails WebSocket tool

【讨论】:

    【解决方案2】:

    您在这里遇到了架构问题。 H12的原因是用户坐在那里的时间不超过30秒。

    通过将长时间运行的任务移动到 Resque 队列中,您将使其与前端 Web 进程断开连接 - 由于进程隔离,两者无法通信。

    因此,您需要了解自己在做什么以及如何做。例如,如果您正在提取提要,您是否能够在用户需要查看输出并以某种方式缓存结果之前的某个时间点执行此操作 - 或者您是否能够接受用户对提要的请求并且然后当您有数据供他们查看等时通过电子邮件发送给他们。

    您遇到的问题是您的用户要求完成的时间超过合理的时间,因此您需要仔细了解自己在做什么以及如何做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多