关于heroku的后台工作如何让网络知道它已经完成了

时间:2012-02-07 22:01:04

标签: javascript ajax heroku sinatra resque

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

这里有一个架构问题。 H12的原因是用户不会在那里坐30秒以上。

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

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

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