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