我有一个书签,在使用时,它会将当前浏览器页面上的所有 URL 提交给 Rails 3 应用程序进行处理。在幕后,我使用Typhoeus检查每个 URL 是否返回 2XX 状态代码。目前,我通过向 Rails 服务器发出 AJAX 请求启动此过程,并在它处理并返回结果时等待。对于一个小的集合,这非常快,但是当 URL 的数量很大时,用户可能会等待长达 10-15 秒。
我考虑过使用延迟作业在用户线程之外处理这个问题,但这似乎不太适合用例。由于用户需要等到处理完成才能看到结果,而延迟作业可能需要长达五秒钟的时间才能开始作业,所以我不能保证处理会尽快发生。不幸的是,在这种情况下,这个等待时间是不可接受的。
理想情况下,我认为应该发生的是:
- 用户点击书签
- 数据被发送到服务器进行处理
- 在关闭线程进行处理时立即返回等待页面
- 等待页面通过 ajax 定期轮询处理结果并更新等待页面(例如:“4 of 567 URLs processed...”)
- 等待页面在结果准备好后更新
一些额外的细节:
- 我正在使用 Heroku(长时间运行的进程在 30 秒后被终止)
- 登录用户和匿名用户都可以使用此功能
这是执行此操作的典型方法,还是有更好的方法?我应该只是滚动我自己的线程外处理,在处理过程中更新数据库,还是有类似延迟作业之类的东西可以用于此(并且适用于 Heroku)?任何朝着正确方向的推动都将不胜感激。