0

是否有可能(我认为这是很平常的事情)取消请求(也是在此请求之后已经在服务器上启动的方法)?

比如说,我从 Rails 应用程序请求在 youtube 或 vimeo 上进行视频搜索(在服务器上实现,并直接向 vimeo 或 youtube 发出进一步请求),但后来我决定取消这个搜索,所以我可以开始一个新的搜索,无需为已经无用的搜索结果浪费资源。所以所有请求都是通过 AJAX 完成的。

我想我应该:

  • 要么定义一个全局变量(例如cancel_req = 4939498348953,每次取消将其设置为我希望取消的方法已知的某个特定 ID,同时设置为cancel = nil. 所以在代码中的某些点只需检查这个变量(但是什么如果第 3 方 API 调用阻塞了很长的持续时间,因为它返回了很多数据?)

  • 或引入 redis 订阅(我认为这个任务有点过度设计)

但这两种方法在我看来都只是一种变通方法。有没有更好的方法来实现cancel那些长期运行的方法,比如在自己的解决方案中请求 3rd 方 API?

更新:

在rails中是否有可能callbacks?也许与yields?

更新2:

工作流程如下:

client -> webserver -> rails-app-server (controller/helper) --->
                                                                |
                                                           foreignAPI  // <-- break execution somewhere here (but of course still handle all other client requests, so - not exiting the application) 
                                                                |  
 client <- webserver <- rails-app-server (controller/helper) <--
4

1 回答 1

0

看来您的问题只是阻止呼叫。考虑delay_job来运行异步任务——在你的情况下,这些长 API 调用。您可以将配置Delayed::Worker.max_run_time = 10.seconds(或任何时间)设置为您愿意等待的限制,并且您可以想到的几乎所有事件都有回调。

于 2013-10-19T06:49:32.193 回答