我有一个bookmarklet,当使用时,将当前浏览器页面上的所有URL提交给Rails 3应用程序进行处理。我正在使用Typhoeus检查每个URL是否返回2XX状态代码。目前,我通过对Rails服务器的AJAX请求启动此过程,只需等待它处理并返回结果。对于一个小集合,这非常快,但是当URL的数量非常大时,用户可以等待,例如10-15秒。
我考虑使用延迟作业在用户的线程之外处理它,但这似乎不是正确的用例。由于用户需要等到处理完成才能看到结果,并且延迟作业可能需要在作业开始之前最多五秒钟,我不能保证处理将尽快发生。不幸的是,在这种情况下,这个等待时间是不可接受的。
理想情况下,我认为应该发生的是:
一些额外的细节:
这是一种典型的方法,还是有更好的方法?我应该只是在处理过程中滚动自己的线程外处理来更新数据库,还是可以使用像我这样的延迟作业(这适用于Heroku)?任何推动正确方向的人都会非常感激。
答案 0 :(得分:1)
我认为你的后一个想法最有意义。我只是将每个url-check的处理卸载到它自己的线程(所以所有的url检查同时运行 - 这应该比顺序检查要快得多)。每次完成时,它都会更新数据库(确保线程不会互相踩踏)。 AJAX端点 - 正如您所说,您在客户端定期轮询 - 将从数据库中获取并返回已完成进程的计数。这是一个简单的方法,我真的不需要任何额外的组件。